tipo - sistemas operativos android
Cargadores en Android Honeycomb (3)
Alex; ¿Intentó validar si se llama siquiera al onLoadInBackground ()?
onLoadInBackground (): llamado en un subproceso de trabajo para realizar la carga real. Las implementaciones no deben entregar el resultado directamente, sino que deben devolverlo desde este método, que eventualmente terminará llamando a deliverResult (D) en el hilo de UI. Si las implementaciones necesitan procesar los resultados en el subproceso de UI, pueden anular deliverResult (D) y hacerlo allí.
Intento descubrir cómo usar los Loaders
en Android 3.0 pero parece que no funciona. Los documentos solo describen el uso de CursorLoader
pero estoy usando AsyncTaskLoader
.
De los documentos parece que solo debería implementar AsyncTaskLoader.loadInBackground()
pero nunca se llama después de getLoaderManager().initLoader()
y luego crea el cargador en la devolución de llamada.
Veo mensajes de depuración que dicen Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}}
por lo que parece que se creó con éxito.
¿Es posible que los cargadores actualmente estén descompuestos en el SDK o hay algún método al que deba llamar después de crear el cargador? (no lo han hecho en el ejemplo de CursorLoader
).
EDITAR: Parece que al llamar a forceLoad()
en el Loader devuelto desde initLoader()
comienza la carga al menos, pero esto significa que no puedes manejar las rotaciones correctamente :(
Debe anular el método onStartLoading (). Mira el ejemplo en el developer.android.com/reference/android/content/… .
/**
* Handles a request to start the Loader.
*/
@Override protected void onStartLoading() {
if (mApps != null) {
// If we currently have a result available, deliver it
// immediately.
deliverResult(mApps);
}
// Start watching for changes in the app data.
if (mPackageObserver == null) {
mPackageObserver = new PackageIntentReceiver(this);
}
// Has something interesting in the configuration changed since we
// last built the app list?
boolean configChange = mLastConfig.applyNewConfig(getContext().getResources());
if (takeContentChanged() || mApps == null || configChange) {
// If the data has changed since the last time it was loaded
// or is not currently available, start a load.
forceLoad();
}
}
Dianne Hackborn respondió en el rastreador de errores y nos remitió a la implementación de la biblioteca estática. CursorLoader está haciendo forceLoad () y por eso está funcionando.
Vea mi clase adjunta para una clase que maneja esto para usted en la mayoría de casos simples en el rastreador de errores: code.google.com/p/android/issues/detail?id=14944