View 体系
View 体系 · androidx.core
Loader:异步数据加载(已废弃)Core 1.20.0-alpha01
LoaderManager 的旧式数据加载方式,以及新项目应使用的替代方案。
最后更新 2026-08-01
注意:
androidx.loader已被弃用。新项目请使用 ViewModel + Repository(或 Room/DataStore 的 Flow),不要在新代码中使用 Loader。
复制即用(了解旧代码用)
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.loader.content.AsyncTaskLoader;
public class MyFragment extends Fragment implements LoaderManager.LoaderCallbacks<MyData> {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<MyData> onCreateLoader(int id, Bundle args) {
return new AsyncTaskLoader<MyData>(getContext()) {
@Override
public MyData loadInBackground() {
return fetchData();
}
};
}
@Override
public void onLoadFinished(Loader<MyData> loader, MyData data) {
// 数据就绪,更新 UI
}
@Override
public void onLoaderReset(Loader<MyData> loader) {}
}迁移到现代方案
| 旧 Loader 语义 | 现代替代 |
|---|---|
| 异步加载 | ViewModel + Repository / Room Flow |
| 配置变更保留 | ViewModel(viewModelScope) |
| 数据回调 | StateFlow + collectAsStateWithLifecycle() |
| 重新加载 | 刷新数据源/重发事件 |
常见陷阱(维护旧代码时)
onLoaderReset忘清理:旧数据引用未释放。restartLoader与initLoader混用:重复创建 loader。- Loader 在新 Fragment 里:
getLoaderManager()已废弃,新 Fragment 体系不保证兼容。
要点
LoaderManager.initLoader(id, args, callbacks)启动加载,跨配置变更保留数据。restartLoader重新加载;destroyLoader释放。- 设计目的(异步加载 + 配置变更保留)已被 ViewModel + LiveData/Flow 完全取代。
- 新代码不要使用;仅维护旧项目时理解其语义。