使用自定义AsyncTaskLoader从Web服务下载数据时,如果我在加载过程中按HOME按钮然后再次进入应用程序,则不会调用onLoadFinished()方法.我的片段正在调用setRetainInstance(true),onActivityCreated()它也getLoaderManager.initLoader(0, null, this)使用相同的方法调用(如建议的那样).
在测试时,我看到当回到片段时onActivityCreated()没有被调用,所以这可能是为什么onLoadFinished()不调用.但是在哪里放这个initLoader()方法呢?我在几个地方读到它不应该被调用onResume().
那么,有什么想法吗?在我的应用程序中,我在各种屏幕中有很多加载器,我需要以优雅的方式解决这个问题.
Cat*_*san 22
在查看问题14944(http://code.google.com/p/android/issues/detail?id=14944)后,我通过覆盖onStartLoading()我的自定义AsyncTaskLoader和调用解决了该问题forceLoad().
更好的解决方案是创建一个AsyncTaskLoader看起来像这样的自定义父级(取自上面链接中alexvem的建议):
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9034 次 |
| 最近记录: |