loadermanager loadercallbacks example android android-fragments android-service android-loadermanager

android - loadercallbacks - cursor loader



¿Puedes usar un LoaderManager desde un servicio? (2)

¿Alguien sabe por qué LoaderManager fue excluido del servicio?

Como se indica en la otra respuesta, LoaderManager se diseñó explícitamente para administrar Loaders través de los ciclos de vida de Acivities y Fragments . Como los Services no tienen estos cambios de configuración para tratar, no es necesario utilizar un LoaderManager .

Si no hay una forma de evitar esto?

Sí, el truco es que no necesita usar un LoaderManager , puede simplemente trabajar con su Loader directamente, que manejará la carga asíncrona de sus datos y supervisará cualquier cambio de datos subyacente, lo cual es mucho mejor que consultar manualmente sus datos.

Primero, crea, registra y comienza a cargar tu Loader cuando se crea tu Service .

@Override public void onCreate() { mCursorLoader = new CursorLoader(context, contentUri, projection, selection, selectionArgs, orderBy); mCursorLoader.registerListener(LOADER_ID_NETWORK, this); mCursorLoader.startLoading(); }

A continuación, implemente OnLoadCompleteListener<Cursor> en su Service para manejar las devoluciones de llamadas de carga.

@Override public void onLoadComplete(Loader<Cursor> loader, Cursor data) { // Bind data to UI, etc }

Por último, no olvide limpiar su Loader cuando se destruya el Service .

@Override public void onDestroy() { // Stop the cursor loader if (mCursorLoader != null) { mCursorLoader.unregisterListener(this); mCursorLoader.cancelLoad(); mCursorLoader.stopLoading(); } }

Tengo un sistema de carga de datos configurado usando un Loader y Cursor personalizado que funciona muy bien desde Actividades y Fragmentos, pero no hay un LoaderManager (que puedo encontrar) en el Servicio. ¿Alguien sabe por qué LoaderManager fue excluido del servicio? Si no hay una forma de evitar esto?


Lamentablemente no. Los cargadores se diseñaron para actividades y fragmentos a fin de manejar limpiamente los cambios de configuración que ocurren en Activites y Fragments. es decir, girar su dispositivo y volver a conectarlo a los datos existentes.

Un servicio no tiene ningún cambio de configuración, se quedará en segundo plano hasta que se complete o el sistema se vea obligado a matarlo. Por lo tanto, suponiendo que está ejecutando su código en una cadena de fondo en su Servicio (que debería ser de todos modos), no hay razón para usar un cargador. Simplemente realice las llamadas que necesita para consultar sus datos.

Por lo tanto, si su servicio es solo un servicio intencionado, puede escribir su lógica para consultar los datos respaldados por el cursor en el método onHandleIntent ().

http://developer.android.com/guide/components/loaders.html