目前,我有一个装载机
@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
而不是 onContentChanged
的 Loader
行为是否有任何重大差异 bundle ?
最佳答案
我认为,主要区别在于 restartLoader
方法会破坏具有相同 ID 的旧加载器并启动一个新加载器,而 onContentChanged
方法要么强制加载器加载 (forceLoad
) 或简单地设置一个标志,指示在加载程序停止时内容已更改。在第二种情况下,加载程序的“所有者”在内容更改后仍然负责其(重新)加载。我假设这是由 loaderManager
自动完成的,就像在 restartLoader
的情况下一样。
如果您决定使用 restartLoader
方法,您应该牢记旧加载器的破坏以及对您的应用程序可能产生的影响,例如缓慢的重新初始化等。
您可以查看方法文档以获取更多信息 - restartLoader
和 onContentChanged
另请注意,旧加载器当新加载器完成其工作时被销毁
关于android - restartLoader 和 onContentChanged 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728237/