我正在通过Loader
了解AsynkTaskLoader
及其实施情况。
在许多示例中,我已经看到在AsynkTaskLoader的onStartLoading
方法中检查cache
,如果它不为null,则直接传递结果。但是,此方法仅在Loader
第一次调用时调用
已启动,因为例如当设备配置发生更改并且Loader
再次从活动的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);
}
}
答案 0 :(得分:1)
如果Loader数据准备就绪,则销毁并重新创建活动(如在配置更改中) - 您将通过deliverResult接收它。 但是,在Activity暂停然后恢复的情况下 - 默认行为是重新获取数据,这是“本地缓存”有意义的时候。