Threading de ContentProvider

Sólo curioso.

getContentResolver().query(...) 

Sé que los cargadores ejecutar consultas sobre los hilos de fondo. ¿Esto también se aplica a inserciones, actualizaciones y eliminaciones? ¿Debo crear AsyncTasks, Hilos, etc … para este tipo de llamadas? Las actualizaciones grandes podrían bloquear el hilo principal de mi aplicación.

 getContentResolver().insert(...) 

¡Gracias!

De los elementos básicos del proveedor de contenido

Recuperación de datos del proveedor

Esta sección describe cómo recuperar datos de un proveedor, utilizando el proveedor de diccionario de usuario como ejemplo.

Para mayor claridad, los fragmentos de código en esta sección llaman a ContentResolver.query () en el "subproceso UI" .En el código real, sin embargo, debe hacer consultas de forma asincrónica en un subproceso separado.Una manera de hacerlo es utilizar La clase CursorLoader, que se describe con más detalle en la guía Loaders, además, las líneas de código son sólo fragmentos, pero no muestran una aplicación completa.

Los Loaders sólo funcionan para consultas, es decir, cargando datos en Actividades o Fragmentos, aparte de insert / update / delete.

Además de Loader, disponible desde Android 3.0, android proporcionó una clase auxiliar AsyncQueryHandler , desde el nivel 1 de la API, para operaciones CRUD asíncronas con operaciones de devolución de llamada CRUD completas.

El AsyncQueryHandler trabaja dentro con un HandlerThread para las operaciones asíncronas y entrega los resultados al hilo principal. El uso de AsyncTask o simples subprocesos de trabajo también son prácticas populares en términos de requisitos particulares.

Cuando dice Loaders ejecutar consultas sobre subprocesos de fondo, debe comprender que son las implementaciones de la clase Loader las que realizan las consultas en el subproceso de fondo.

La consecuencia de esto es que querrás usar o extender e implementar subclases de la clase abstracta de Loader y no usar threads AsyncTask o Java. La razón es cuando usted crea un cargador, espera que usted devuelva una instancia del tipo Cargador. Un hilo de Java o un AsyncTask no se puede utilizar para esto. Las subclases de la clase Loader lo hacen iniciando su propio subproceso. La clase cliente o la clase que crea el cargador sólo inicializa el cargador. La instancia actual de Loader puede hacer lo que quiera que haga. Esto puede ser cualquier cosa: insertar, actualizar, eliminar, etc. La implementación de Android CursorLoader consulta datos de tablas en un subproceso de fondo de forma asincrónica y devuelve el conjunto de resultados. Android no proporciona implementaciones nativas similares para insertar o actualizar datos. Lo que tienes es la opción de extender desde AsyncTaskLoader (la misma clase que CursorLoader hereda de).

Además, tenga en cuenta que los cargadores se utilizan para optimizar el acceso a la base de datos y, como tal, proporcionará publicar el resultado en el hilo principal sólo cuando hayan completado su tarea y no antes (hay un hack como solución para publicar actualizaciones a la interfaz de usuario de hilo Pero entonces esto rompe el paradigma). Los cargadores sólo se preocupan por completar su trabajo y no están interesados ​​en proporcionar ninguna actualización.

Si simplemente desea gestionar las consultas de ContentProvider de forma asíncrona, puede considerar utilizar la clase AsyncQueryHandler suministrada por Android.

  • Android finaliza el subproceso en el servicio y la actualización de la interfaz de usuario
  • Acceso al dominio desde un subproceso incorrecto Excepción mientras se envió una copia usando copyFromRealm
  • Utilizar controlador para publicar en UI Thread
  • android Espere entre actualizaciones de GridView
  • Servicio vs IntentService
  • Arquitectura de aplicaciones de Android: basada en eventos o en capas
  • Cómo detener el hilo de ASyncTask en android
  • ¿Cómo implementar un ProgressDialog mientras que Activity solicita un SoapObject desde un Servicio Web?
  • ¿Cómo ajustar Delay for loop in android?
  • Excepción de interrupción de subproceso en modo Multi-ventana
  • RxJava Multithreading con Realm - Acceso al dominio desde un subproceso incorrecto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.