android - restartLoader 和 onContentChanged 的​​区别

标签 android android-loadermanager android-loader

目前,我有一个装载机

@Override
public Loader<List<HomeMenuRowInfo>> onCreateLoader(int arg0, Bundle bundle) {
    return new HomeMenuRowInfosLoader(this.getSherlockActivity());
}

有时,由于内容更改,我需要让加载器重新加载。我会这样做。

this.getLoaderManager().getLoader(0).onContentChanged();

但是,我想在内容更改时将一些额外的包信息传递给 onCreateLoader 回调。我通过使用 onContentChanged 意识到,没有办法这样做。

我唯一能想到的就是

this.getLoaderManager().restartLoader(0, bundle, this);

我想知道,除了传入的能力之外,使用 restartLoader 而不是 onContentChangedLoader 行为是否有任何重大差异 bundle ?

最佳答案

我认为,主要区别在于 restartLoader 方法会破坏具有相同 ID 的旧加载器并启动一个新加载器,而 onContentChanged 方法要么强制加载器加载 (forceLoad) 或简单地设置一个标志,指示在加载程序停止时内容已更改。在第二种情况下,加载程序的“所有者”在内容更改后仍然负责其(重新)加载。我假设这是由 loaderManager 自动完成的,就像在 restartLoader 的情况下一样。

如果您决定使用 restartLoader 方法,您应该牢记旧加载器的破坏以及对您的应用程序可能产生的影响,例如缓慢的重新初始化等。

您可以查看方法文档以获取更多信息 - restartLoaderonContentChanged

另请注意,旧加载器新加载器完成其工作时被销毁

关于android - restartLoader 和 onContentChanged 的​​区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728237/

相关文章:

android - 使用ionic 3的平台之间没有区别

android - Butterknife - 多次注入(inject)

mysql - 从内容提供者调用时光标抛出空指针

android - 将 RecyclerView 与来自 LoaderManager 的数据一起使用

android - 何时使用 Android 加载器

Android : getSupportLoaderManager(). getLoader(id) 不返回以前使用的加载程序

java - 无法在 Android 上将字符串转换为日期

android - performItemClick onLoadFinished 后的第一个 ListView 项

android - 为什么Loaders不能是非静态内部类?

Android:ListView 中 CardView 元素之间的差距