Cuando el uso de un Proveedor de Contenido

Entiendo que los Proveedores de Contenido están hechos para permitir públicamente el intercambio de datos entre aplicaciones. Sin embargo, me pregunto si alguien tiene pensamientos sobre la fabricación de un Proveedor de Contenido para utilizar solamente dentro de la propia aplicación. ¿Hay ventajas para hacer esto? Las desventajas?

En el pasado he implementado el SQliteOpenHelper acceso a los datos de mi base de datos, pero estoy considerando la creación de un Proveedor de Contenido. Me siento como el URI enfoque para solicitar los datos es clara y concisa. Por otro lado, el uso de un Proveedor de Contenido sólo para mi aplicación redundante ( ya que dentro de ella voy a tener una clase SQliteOpenHelper ) y más trabajo que necesito?

  • He hecho una biblioteca para hacer de proveedor de contenido fáciles de escribir. Incluso más fácil que escribir llanura SQLiteOpenHelper. github.com/coocood/VContentProvider
InformationsquelleAutor Pzanno | 2011-02-08

9 Kommentare

  1. 56

    Si usted no está planeando para compartir datos, no creo que acerca de los Proveedores de Contenido. Ellos son poderosos, pero difícil de escribir y va a ser una tontería para implementar con ellos si va a usar internamente.

    Sin embargo, me pregunto si alguien tiene pensamientos sobre la fabricación de un Proveedor de Contenido para utilizar solamente dentro de la propia aplicación.

    De curso… por ejemplo, para los viejos de la lista de TAREAS de la aplicación escribí, tuve que escribir un proveedor de contenido para permitir que otras aplicaciones de recuperar y acceder a las tareas de los estados. Era parte de los requisitos, pero más que eso, tiene sentido y la aplicación más agradable.

    • Estoy de acuerdo con su justificación, pero también creo que es importante (especialmente para los principiantes) que una vez que el Proveedor de Contenido es implementado a ganar un montón de beneficios. Por ejemplo, puede utilizar el CursorLoader para realizar consultas asíncronas… usted tiene acceso a una instancia singleton (el ContentResolver) para realizar consultas, etc. Por supuesto, usted puede implementar su propio Cargador para el uso de la base de datos SQLite… por supuesto, usted puede implementar el acceso a una única instancia de base de datos de toda la aplicación… y, por supuesto, un ContentProvider no es necesario a menos que quieras compartir
    • de datos con otras aplicaciones. Dicho esto, hay muchos los beneficios que vienen con la aplicación de su propio Proveedor de Contenido, por lo que no debería caer de la consideración sólo porque su aplicación no compartir sus datos.
    • Sí, usted es completamente correcto, pero sigo pensando que no vale la pena el esfuerzo en la mayoría de los casos. Lo he hecho al menos 12 tipos diferentes de aplicaciones de Android (publicado en el Play Store) y nunca se necesita un ContentProvider. De hecho, la última aplicación que hemos trabajado se hizo inicialmente con un ContentProvider y nos acaba de eliminar ya que en realidad es más un dolor en el culo para el uso de lo que debería (incluso escribí una biblioteca para hacer más fácil implementar básica ContentProviders: github.com/casidiablo/persistence, pero nunca había utilizar mi auto XD).
    • proporciona la mayoría de los consejos prácticos. Incluso Android documento dice que no debemos usar ContentProvider si no necesitamos – «Usted no necesita un proveedor de bases de datos u otros tipos de almacenamiento persistente si el uso es totalmente dentro de su propia aplicación y no necesita ninguna de las características enumeradas anteriormente. En su lugar, puede utilizar uno de los sistemas de almacenamiento descrito en la App de Ahorro de los Datos de la página.». De lo contrario, estamos a la ingeniería.
    • Resumen: Si usted no desea compartir sus datos, usted puede evitar el Proveedor de Contenido, pero por otro Proveedor de Contenido hace la vida más fácil si usted desea cambiar su aplicación de base de datos. por ejemplo, de SQLite para MangoDB.
    • ¿Es seguro utilizar el Proveedor de Contenidos, como mis datos está disponible para su modificación. Algunos no deseados de la aplicación podría tomar ventaja de ella.

  2. 116

    Yo diría que es definitivamente una buena idea usar un ContentProvider incluso si usted no tiene intención de hacerlo público.

    Es una buena práctica para proporcionar el mayor nivel de abstracción de los datos para hacer más fácil cambiar internamente. ¿Qué pasa si usted decide cambiar la subyacente estructura de base de datos en un momento posterior? Si utiliza un ContentProvider puede contener todos los cambios estructurales dentro de ella, donde como si no dispones de uno, que se ven obligados a cambiar todo el código que se ven afectados por los cambios estructurales. Además, es bueno ser capaz de volver a utilizar el mismo estándar API para acceder a los datos en lugar de la basura de su código con bajo nivel de acceso a la base de datos.

    Además, siempre existe la posibilidad de que usted puede ser que desee exponer sus datos en el futuro. Si usted no usa un ContentProvider delante, va a ser mucho más difícil de reconversión en una fecha posterior.

    Luego, hay otras partes de Android, donde ContentProvider‘s necesario/recomendable como cuando se utiliza SyncAdapters y si quieres una Aplicación Widget que implica el acceso a los datos, por ejemplo.

    En resumen, hay muy poca sobrecarga en la escritura de un ContentProvider frontal (una vez que haya aprendido la API que es una buena idea de todos modos) así que tiene sentido hacerlo, incluso para datos privados.

    • Yo no podía estar más de acuerdo. Se obliga a lo abstracto de su capa de datos en una forma que prácticamente asegura un nuevo desarrollador que no será capaz de pareja de la interfaz de usuario con ella.
    • Inmediatamente después de aprender Android, empecé a pensar de la misma manera exactamente por esta razón. Incluso si no es público, siempre se puede beneficiar del aumento de la abstracción y el único punto de aplicación de sus decisiones arquitectónicas. Me encanta ContentProviders.
    • No me llega «¿Qué pasa si usted decide cambiar la subyacente estructura de base de datos en un momento posterior? Si utiliza un ContentProvider puede contener todos los cambios estructurales dentro de» parte. Por favor me ayudan?
    • Usted puede hacer que el proveedor de contenido disponible sólo para su propia aplicación con este atributo: android:exported="false"
    • En mi humilde opinión, puede, y debe ocuparse de sus datos en una forma totalmente abstracta, sin necesidad de implementar ContentProvider.
    • Como yo estaba en mi camino a la implementación de un contentprovider solución para mi internos sqlite db (sin interacción con otras aplicaciones), vi el comentario de developer.android.com/guide/topics/providers/… que los estados Usted no necesita un proveedor de utilizar una base de datos SQLite si el uso es totalmente dentro de su propia aplicación.

  3. 7

    Echar un vistazo a la MOTODEV Studio para Eclipse. Es un entorno de desarrollo que se extiende Eclipse. Ellos tienen una herramienta donde se puede generar automáticamente un proveedor de contenido de una base de datos. Si un proveedor de contenidos facilita el acceso a sus datos y no tiene un impacto significativo en el rendimiento de ir adelante y utilizarlo. En la mayoría de los casos este será el caso.

  4. 5

    En resumen,Content Providers ayuda en la gestión de sus datos efectivamente. Yo sugeriría el uso de ellos por las siguientes razones.

    • Actúa como un capa de abstracción entre la interfaz de usuario y base de datos de. Puede implementar validación de datos en ContentProviders para validar los datos introducidos por el usuario. También le permite a modificar la estructura de la base de datos sin tocar la interfaz de usuario y otras partes.
    • Ellos juegan muy bien con otros android framework de clases de como SyncAdapter. Por ej., puede actualizar automáticamente la lista, cuando un valor en una base de datos de los cambios de uso de ContentProviders junto con CursorLoader. Sin ContentProviders usted tiene que aplicar una gran cantidad de funcionalidades como estos por su cuenta.
    • Podemos de forma segura exponer nuestros datos personales a otras aplicaciones. El uso de ContentProviders nos permitirá compartir nuestros datos de forma segura y fácil con otras aplicaciones.

    Así que incluso si usted no necesita ninguna de estas funcionalidades ahora, usted podría necesitar en el futuro y su buena para ir la milla extra y ponerlas en práctica ahora mismo.

    • Gran respuesta. Una sola frase de la descripción de ContentProviders y tres razones por las que se deberían utilizar. A veces las explicaciones sencillas son las mejores. +1
  5. 4

    Estoy de acuerdo ContentProviders son un poco difíciles de comprender, pero que son sin duda útiles, incluso si las quieres usar de forma interna para que la propia aplicación. La mejor cosa sobre ella es que se puede personalizar el contentproviders adecuados para la Uri.

    Aquí es un escenario donde se puede tener 5 tablas en su base de datos, pero usted necesita para unirse a algunos de ellos en ciertas órdenes antes de usarlos. Y hacer un contenido URI para cada una de estas combinaciones. Usted podría, después de que cada uso de estas URIs como una tabla 🙂

    Le sugiero que vaya por delante con el Proveedor de Contenidos, usted se sorprenderá al ver lo poderoso que es.

  6. 2

    En mi punto de vista, el proveedor de contenidos viene con un montón de ventajas de dejar solo el intercambio de datos con otras aplicaciones. Si usted necesita para sincronizar con el servidor mediante una Sincronización Adaptador, el uso de google cloud messaging, actualización automática de la interfaz de usuario cuando el subyacente de los datos en la base de los cambios de uso de Cargadores, implementar la búsqueda, usar los widgets… a continuación, el proveedor de contenido es para usted.

    Yo prefiero que siga la pauta, porque un día puede necesitar para implementar algunas de las características anteriores se adjunta a los proveedores de contenido

    Por el camino, usted puede construir rápidamente que la base de datos y CP en menos de 5 minutos usando el proveedor de contenidos generador

  7. 1

    Como se dijo en la documentación:
    La creación de un proveedor de Contenido

    Usted no necesita un proveedor de utilizar una base de datos SQLite si el uso es
    totalmente dentro de su propia aplicación.

    Así que ¿por qué molestarse en el desarrollo de esta sobrecarga? Desea más fácil y más rápido desarrollo, derecho? Así que una capa de abstracción (SQLiteOpenHelper descendiente) es suficiente.

    Ver La Navaja de Occam
    No hacer una de las entidades sin una muy buena razón.

  8. 0

    No utilice el proveedor de contenido si no desea compartir datos con otras aplicaciones. El uso sencillo de sqlitedatabase para realizar operaciones de base de datos. Tenga cuidado al utilizar proveedores de contenidos para el almacenamiento de datos confidenciales, porque su información confidencial pueden ser accedidos por otras aplicaciones

  9. 0

    El uso de un Proveedor de Contenido puede ayudar en un mayor nivel de abstracción, ponerlo dentro de su propia aplicación, para hacer que agregar una gran cantidad de tiempo a su proyecto. Sin embargo, si usted está utilizando para compartir datos, la configuración de la aplicación o configuraciones a través de múltiples aplicaciones, a continuación, el Proveedor de Contenido es su elección.

    Ver sus niveles de seguridad y me gustaría recomendar el uso de SQLcipher para cifrar los datos-en-reset (DAR) si el Proveedor de Contenido es escrito a SQLite. (Yo he utilizado un proveedor de contenido en un par de soluciones y proporciona la capacidad para la toma de vivir una «foto instantánea» de los valores operacionales para la depuración y pruebas.)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea