在哪种情况下 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" 有意义的时候。
我正在学习 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" 有意义的时候。