1. Los proveedores de contenido no son seguros para subprocesos
Por defecto, los proveedores de contenido no son seguros para subprocesos. Si tiene varios subprocesos utilizando un proveedor de contenido, puede ver que se lanzan muchas excepciones diferentes y otras inconsistencias de datos. La forma más sencilla de solucionar este problema es utilizar la palabra clave sincronizada en cada uno de los métodos públicos expuestos por el proveedor de contenido.
De esta manera, solo un hilo a la vez puede acceder a estos métodos.
2. Juega bien al escribir muchas cosas
Tengo la necesidad en la nueva aplicación Serval Maps de importar datos de archivos binarios a la base de datos utilizada internamente por la aplicación. Para hacer esto y jugar bien con el resto de la aplicación, es mejor:
Genere un nuevo hilo para realizar la importación de modo que otros hilos no se vean afectados negativamente, en particular el hilo encargado de actualizar la interfaz de usuario; y Pause brevemente al final de cada importación para dar más oportunidades a otros subprocesos que necesitan usar los métodos sincronizados.
3. Los proveedores de contenido te obligan a pensar de forma lateral a veces
La forma en que funcionan los proveedores de contenido en Android es proporcionar una capa de abstracción entre el resto de su código y la base de datos subyacente. Esto se debe principalmente al hecho, por lo que yo sé, de que los proveedores de contenido pueden acceder a datos desde lugares distintos a las bases de datos.
Esto significa que no puede ejecutar consultas SQL sin procesar en la base de datos subyacente y debe especificar los diversos componentes de una consulta SQL utilizando variables pasadas a los diversos métodos, como el método de consulta. Si tiene una tarea que no encaja en la forma en que un proveedor de contenido maneja SQL, tiene dos opciones:
Piense lateralmente en la consulta, tal vez pueda obtener los datos que necesita mediante consultas alternativas y accediendo a los resultados desde el cursor; y Use un URI para acceder a los datos normalmente y un URI especial que coincida con una consulta específica para aquellas tareas que no tienen alternativas.