¿Se puede utilizar un LoaderManager de un servicio?

Tengo un sistema de carga de datos configurado usando un cargador y un cursor de encargo que esté trabajando grande de actividades y de fragmentos pero no hay LoaderManager (que puedo encontrar) en servicio. ¿Alguien sabe por qué LoaderManager se excluyó del servicio? Si no es hay una manera de evitar esto?

2 Solutions collect form web for “¿Se puede utilizar un LoaderManager de un servicio?”

¿Alguien sabe por qué LoaderManager se excluyó del servicio?

Como se indicó en la otra respuesta, LoaderManager fue diseñado explícitamente para gestionar Loaders través de los ciclos de vida de Acivities y Fragments . Dado que los Services no tienen estos cambios de configuración para tratar, no es necesario usar LoaderManager .

Si no es hay una manera de evitar esto?

Sí, el truco es que no necesitas usar LoaderManager , solo puedes trabajar directamente con tu Loader , que manejará asincrónicamente cargando tus datos y supervisando cualquier cambio de datos subyacente para ti, lo cual es mucho mejor que consultar tus datos manualmente.

Primero, cree, registre y comience a cargar su Loader cuando se cree su 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 llamada de carga.

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

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

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

Lamentablemente no. Los cargadores fueron diseñados para actividades y fragmentos con el fin de limpiar los cambios de configuración que se producen en Activites y Fragmentos. Es decir, girar el dispositivo y volver a conectarlo a los datos existentes.

Un servicio no tiene ningún cambio de configuración, se sentará en el fondo hasta que se complete o el sistema se ve obligado a matarlo. Así que suponiendo que está ejecutando su código en un hilo de fondo en su Servicio (que debe ser de todos modos), no hay razón para utilizar un cargador. Simplemente haga las llamadas que necesita para consultar sus datos.

Así que si su Servicio es sólo un IntentService, puede escribir su lógica para consultar sus datos con el cursor en el método onHandleIntent ().

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

  • Prueba de unidad Actividad.startService () llamada?
  • El servicio no se detiene incluso después de que el método onDestroy se llama en Android
  • Cómo el calendario de Google o Instagram hacer sus aplicaciones todo el tiempo en marcha y funcionando incluso después de la parada de fuerza
  • ¿Cómo implemento un BroadcastReceiver en una clase de servicio en Android?
  • Servicio de detector de balizas de estimación en segundo plano
  • Android: Leyendo la etiqueta NFC en la clase de servicio
  • Obtención de I / art: Explicit concurrent mark sweep GC liberado
  • Problemas con la vinculación al servicio en Android
  • ¿Cómo utilizar PendingIntent para comunicarse desde un servicio a un cliente / actividad?
  • Android: startActivityForResult no llamando aActivityResult
  • El proceso del servicio se cancela después de que la aplicación se elimina de la bandeja de aplicaciones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.