Loader:异步数据加载(已废弃) · AndroidX 源码指南
AAndroidX 源码指南
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 忘清理:旧数据引用未释放。
  • restartLoaderinitLoader 混用:重复创建 loader。
  • Loader 在新 Fragment 里getLoaderManager() 已废弃,新 Fragment 体系不保证兼容。

要点

  • LoaderManager.initLoader(id, args, callbacks) 启动加载,跨配置变更保留数据。
  • restartLoader 重新加载;destroyLoader 释放。
  • 设计目的(异步加载 + 配置变更保留)已被 ViewModel + LiveData/Flow 完全取代。
  • 新代码不要使用;仅维护旧项目时理解其语义。

相关页面