自定义AsyncTaskLoader,5次尝试后未调用loadinBackground

时间:2013-02-10 18:41:18

标签: android asynctaskloader

我有一个SherlockListFragment来实现自定义AsyncTaskLoader。 在被覆盖的onStartLoading()中,我有:

@Override
protected void onStartLoading() {
  if (mData != null) {
    deliverResult(mData);
  }
  else{
    forceLoad();
  }
}

包含SherlockListFragmentonActivityCreated中启动加载程序:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);
  mAdapter = new MyListAdapter(getActivity());
  setListAdapter(mAdapter);
  getLoaderManager().initLoader(0, null, this);
}

和:

@Override
public Loader<List<MyData>> onCreateLoader(int id, Bundle args) {
  return new MyListLoader(getActivity());
}

问题是,在对FragmentActivity进行5次激活/导航后,不会调用loadinBackground()。调用onStartLoding以及forceLoad,但就是这样。 没有异常,LogCat中没有任何内容。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

可以调用 forceLoad()

查看文档says
通常只应在加载程序启动时调用它 - 也就是说,isStarted()返回true。

完整代码:

@Override
protected void onStartLoading() {
    try {
        if (data != null) {
            deliverResult(data);
        }
        if (takeContentChanged() || data == null) {
            forceLoad();
        }

        Log.d(TAG, "onStartLoading() ");
    } catch (Exception e) {
        Log.d(TAG, e.getMessage());
    }
}

重要:

documentation says Loader<D>的子类通常必须至少实现 onStartLoading(),onStopLoading(),onForceLoad()和onReset()

AsyncTaskLoader扩展Loader但不实现 onStartLoading(),onStopLoading(),onReset()。你必须自己实现它!

P.S。在使用简单的CursorLoader之后,我对它感到困惑,我也认为使用forceLoad()是不好的做法。但事实并非如此。