从HOMEbutton回来后,onLoadFinished不会被调用

使用自定义AsyncTaskLoader从Web服务下载数据时,如果在加载过程中按HOMEbutton,然后再次input应用程序,则不会调用onLoadFinished()方法。 我的片段正在onActivityCreated()调用setRetainInstance(true) ,它也使用相同的方法(build议)调用getLoaderManager.initLoader(0, null, this) )。

在testing的时候,我看到回到片段onActivityCreated()不被调用,所以这可能是为什么onLoadFinished()不被调用。 但是在哪里放置initLoader()方法呢? 我读过几个地方,它不应该在onResume()调用。

那么,有什么想法? 我在我的应用程序的各种屏幕上有很多装载机,我需要以优雅的方式解决这个问题。

Solutions Collecting From Web of "从HOMEbutton回来后,onLoadFinished不会被调用"

查看问题14944( http://code.google.com/p/android/issues/detail?id=14944 )之后,我通过在自定义AsyncTaskLoader重写onStartLoading()并调用forceLoad()来解决该问题。

更好的解决scheme是创build一个自定义的父AsyncTaskLoader ,看起来像这样(从上面链接的alexvem的build议中获取):

 public abstract class AsyncLoader<D> extends AsyncTaskLoader<D> { private D data; public AsyncLoader(Context context) { super(context); } @Override public void deliverResult(D data) { if (isReset()) { // An async query came in while the loader is stopped return; } this.data = data; super.deliverResult(data); } @Override protected void onStartLoading() { if (data != null) { deliverResult(data); } if (takeContentChanged() || data == null) { forceLoad(); } } @Override protected void onStopLoading() { // Attempt to cancel the current load task if possible. cancelLoad(); } @Override protected void onReset() { super.onReset(); // Ensure the loader is stopped onStopLoading(); data = null; } }