2011-09-20 13 views
11

documentación Android diceCómo crear un ContentProvider Thread-safe?

métodos ContentProvider se pueden llamar desde varios ContentResolver objetos en diferentes procesos y subprocesos, deben ser implementados de una manera segura para los subprocesos

y me encontré con este post en Stackoverflow Android - sqlite content providers and multithreading que dice que ya es seguro para hilos?

Entonces, ¿me preguntaba cómo crear un thread-safe ContentProvider? ¿Es suficiente si hago la inserción/actualización/eliminar los métodos syncronized

public synchronized Uri insert (Uri uri, ContentValues values) { 

} 
+0

Tengo varios hilos que insertan datos en la misma base de datos/tabla – kakopappa

+0

Lea lo que otras personas escribieron en: [¿Cuáles son las mejores prácticas para SQLite en Android?] (Http://stackoverflow.com/questions/2493331/ what-are-the-best-practices-for-sqlite-on-android/3689883 # 3689883). Debería aclarar las cosas para ti. – JJD

+0

Sí, pero qué pasa si tienes varios subprocesos actualizando y eliminando – JPM

Respuesta

11

Se podría hacer todos los métodos synchronized, , pero asegúrese de que es absolutamente necesario antes de hacer. En los casos en que la fuente de datos subyacente ya es segura para subprocesos, los métodos synchronized podrían ser costosos. Vea mi blog post sobre este tema para más información.

+1

Incluso si sincronizas cada método ... lo que evitaría que una solicitud para actualizar y una solicitud para eliminar entraran al mismo tiempo, lo que provocaría la seguridad del subproceso. Me parece que cada uno de estos métodos necesita esperar a que desaparezca un semáforo antes de continuar. O mejor aún, todos estos métodos usan una cola ... – JPM

+4

@JPM Sí, tienes toda la razón. En el caso de que esté utilizando una 'SQLiteDatabase' como fuente subyacente, esto no debería importar (' SQLiteDatabase' es seguro para subprocesos). Aparte de eso, no hay garantías ... tendría que sincronizar el origen de datos o sincronizar el acceso al 'ContentProvider' (yo sugeriría el primero). –

+0

¿Cómo sincronizarías la clase Datasource/DataBaseHelper que usa ContentProvider? Tal vez debería preguntar esto como una pregunta ... parece que otros no han respondido en este sitio. – JPM

Cuestiones relacionadas