Domanda

Sono un po' confuso sulla questione se sia meglio usarlo ContentProvider O Database.Oppure non fa differenza se non voglio condividere dati con altre applicazioni.

Se ho capito bene, i fornitori di contenuti basati su SQLite DB ed è anche possibile che il loro contenuto sia accessibile solo per la mia applicazione.

Puoi dare qualche spiegazione?

Grazie mille,

Mur

È stato utile?

Soluzione

Ci sono sicuramente problemi utili per i quali un provider rappresenta una soluzione, in particolare per la pubblicazione di dati tra app.Ad esempio, devi utilizzare un fornitore di contenuti per fornire suggerimenti di ricerca a una casella di ricerca rapida.

Tuttavia, per uso interno all'interno di un'applicazione, non sono un fan.I vantaggi secondo me sono controbilanciati dai costi (ad esempio, flessibilità ridotta, spese generali aggiuntive).

Se implementi un fornitore di contenuti, tieni presente che sono accessibili da altre applicazioni per impostazione predefinita.Devi includere android:exported="false" nel <provider> elemento per renderli privati ​​nella tua app.

Altri suggerimenti

L'uso di un fornitore di contenuti ti darà un design più modulare e semplificerà la vita se ad un certo punto in futuro desideri raggiungere i dati da altre applicazioni. Se sei sicuro che i dati saranno sempre necessari da un'applicazione, potresti anche operare direttamente nel database.

Esiste una particolare limitazione di SQLite di cui dovresti essere consapevole e cioè che SQLite è solo utente singolo. Ciò significa davvero che dovrai proteggere il tuo database dall'accesso da più thread contemporaneamente. Questo non è generalmente un problema in un fornitore di contenuti, poiché hanno quasi sempre un'implementazione a thread singola.

I motivi per utilizzare il fornitore di contenuti lo sono qui.

In sintesi:

  1. Modificare facilmente l'origine dati sottostante (è possibile modificare il tuo DB da SQLite a Mongo o a un file JSON senza alcuna modifica dell'app)
  2. Sfrutta la funzionalità di alcune classi Android (Syncadapter, Loaders, CursoRadapter) - Queste classi richiedono un fornitore di contenuti e non puoi usarle se non ne hai una
  3. Consenti a molte app di accedere, utilizzare e modificare in modo sicuro un singolo dati. (che è davvero il motivo principale per usarlo)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top