¿Por qué se creó ContentProvider de Android?

11

El título resume mi pregunta, pero para elaborar básicamente lo que quiero entender es por qué los diseñadores de Android quieren aplicaciones que necesiten trabajar con datos compartidos para usar un proveedor de contenido en lugar de acceder directamente a la base de datos SQLite.

La única razón por la que puedo pensar es en la seguridad porque se puede acceder a ciertos archivos solo mediante ciertos procesos y de esa manera el Proveedor de contenido es el guardián que garantiza que cada aplicación tenga los privilegios adecuados antes de permitir el acceso de lectura y / o escritura al archivo de la base de datos. ¿Es esa la razón principal por la que se creó ContentProvider?

satur9nine
fuente

Respuestas:

6

Es sobre todo una forma de aislar a los consumidores y proveedores de datos. Usted desarrolla su propio proveedor de contenido o extiende uno existente si desea hacer que algunos de sus datos sean públicos o al menos disponibles para otra aplicación.

Es cierto que este servidor puede controlar los accesos desde un punto de vista de seguridad, pero también le permite reelaborar la implementación física de sus datos cuando lo desee. Todo lo que necesita hacer es adaptar el back-end de su proveedor de contenido en ese caso. Las aplicaciones del consumidor de datos no tendrán que reescribirse. Continuarán accediendo a sus datos a través de su resolución de contenido sin saber ningún cambio en la implementación subyacente real.

Además, Android instanciará solo una instancia de su proveedor de contenido, incluso si varios clientes acceden a los datos, por lo que se encargará de los accesos concurrentes sin que tenga que preocuparse por ellos.

Finalmente, creo que también manejará el trabajo pesado de un arranque y apagado limpio.

Alain Pannetier
fuente
1
Creo que el aislamiento es probablemente la mejor respuesta. No estoy de acuerdo con su punto sobre el acceso concurrente, SQLite y la interfaz Java de Android manejan la concurrencia, ContentProvider permite múltiples hilos simultáneos para consultar / insertar / actualizar, por lo que realmente no está haciendo nada por usted.
satur9nine
3

El ContentProviderresumen también toda la comunicación entre procesos que se requiere para comunicarse con otras aplicaciones de terceros. Tener que escribir este código usted mismo sería un gran dolor.

Alex Lockwood
fuente
Los terceros siempre pueden acceder directamente al archivo de la base de datos, no se necesita comunicación entre procesos allí.
satur9nine
No estoy seguro de lo que quiere decir ... si una aplicación es un "tercero", entonces, por definición, debe existir en un proceso diferente (ya que cada aplicación de Android tiene su propio proceso principal). Además, si el sistema operativo Android le permitiera tener acceso directo a los almacenes de datos en bruto de otras aplicaciones, eso plantearía algunos problemas de seguridad bastante grandes.
Alex Lockwood
1

ContentProvider también es una abstracción que oculta los detalles de cómo se almacenan / generan los datos. Por ejemplo, en una de mis aplicaciones tengo un proveedor de contenido que devuelve imágenes PNG. Estas imágenes no se almacenan en ningún lugar, se generan a pedido.

Dan Dyer
fuente