Ich lerne über die Loader
und ihre Implementierung mit AsynkTaskLoader
.In diesem Fall verwendet AsynkTaskLoader Cache-Daten?
In vielen Beispielen habe ich gesehen, dass in der AsynkTaskLoader onStartLoading
Methode ist, wo die cache
überprüft wird, und wenn es nicht null ist, wird das Ergebnis direkt geliefert. Diese Methode wird jedoch nur das erste Mal aufgerufen, wenn die Loader
initiiert wird, da zum Beispiel, wenn sich die Gerätekonfiguration ändert und die Loader
erneut von Activity OnCreate
Methode Loader
Anruf direkt onLoadFinished
Methode aufgerufen wird.
Um die Funktion der Loader
besser zu verstehen, würde ich gerne wissen, wie ich einen Fall neu erstellen kann, wo der Cache verwendet wird.
Hier einige Beispiel-Code:
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);
}
}