restartLoader和onContentChanged之间的区别

Che*_*eng 6 android android-loadermanager android-loader

目前,我有一个装载机

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

有时,由于内容更改,我需要让加载程序重新加载.我会做的.

this.getLoaderManager().getLoader(0).onContentChanged();
Run Code Online (Sandbox Code Playgroud)

但是,我希望onCreateLoader在内容更改时将一些其他捆绑信息传递给回调.我意识到通过使用onContentChanged,没有办法这样做.

我能搞清楚的唯一方法是

this.getLoaderManager().restartLoader(0, bundle, this);
Run Code Online (Sandbox Code Playgroud)

我想知道,是否有任何重大分歧Loader的行为,使用的restartLoader不是onContentChanged,除了捆绑传递的能力吗?

sta*_*an0 4

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

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

您可以查看方法文档以获取更多信息 -restartLoader并且onContentChanged

另请注意,新加载程序完成工作时,旧加载程序将被销毁