在哪种情况下 AsyncTaskLoader 使用缓存数据?

In which case AsynkTaskLoader uses cache data?

我正在学习 Loader 及其在 AsynkTaskLoader 中的实现。

我在很多例子中看到,在AsynkTaskLoader的onStartLoading方法中是检查cache的地方,如果不为null则直接传递结果。但是,此方法仅在 Loader 第一次被调用时被调用 启动,因为例如当设备配置更改并且 Loader 从 Activity 的 OnCreate 方法再次启动时 Loader 直接调用 onLoadFinished 方法。

为了更好地理解 Loader 的功能,我想知道如何重新创建使用缓存的情况。

这里是一些示例代码:

 static class ExampleAsyncTaskLoader extends AsyncTaskLoader<String>{
    String mCacheData;
    Bundle mArgs;

    ExampleAsyncTaskLoader(Context context, Bundle args) {
        super(context);
        mArgs = args;
    }

    @Override
    protected void onStartLoading() {
            /* If no arguments were passed, we don't have a query to perform. Simply return. */
        if (mArgs == null) {
            return;
        }

        if (mCacheData != null){
            deliverResult(mCacheData);
        }else {
            forceLoad();
        }
    }

    @Override
    public String loadInBackground() {

            /* Extract the search query from the args using our constant */
        String searchQueryUrlString = mArgs.getString(SEARCH_QUERY_URL_EXTRA);

            /* If the user didn't enter anything, there's nothing to search for */
        if (searchQueryUrlString == null || TextUtils.isEmpty(searchQueryUrlString)) {
            return null;
        }

            /* Parse the URL from the passed in String and perform the search */
        try {
            URL githubUrl = new URL(searchQueryUrlString);
            return NetworkUtils.getResponseFromHttpUrl(githubUrl);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public void deliverResult(String data) {
        mCacheData = data;
        super.deliverResult(data);
    }
}

万一 Activity 被销毁并重新创建(如在配置更改中),如果加载程序数据已准备就绪 - 您将通过 deliverResult 接收它。 但是,在 Activity 暂停然后恢复的情况下 - 默认行为是重新获取数据,这就是 "local cache" 有意义的时候。