1. I fornitori di contenuti non sono thread-safe
Per impostazione predefinita, i fornitori di contenuti non sono thread-safe. Se hai più thread che utilizzano un provider di contenuti, puoi vedere molte eccezioni diverse generate e altre incongruenze nei dati. Il modo più semplice per risolvere questo problema è utilizzare la parola chiave sincronizzata su ciascuno dei metodi pubblici esposti dal provider di contenuti.
In questo modo solo un thread alla volta può accedere a questi metodi.
2. Gioca bene quando scrivi molte cose
Ho la necessità nella nuova applicazione Serval Maps di importare dati da file binari nel database utilizzato internamente dall'applicazione. Per fare questo e giocare bene con il resto dell'applicazione è meglio:
Genera un nuovo thread per eseguire l'importazione in modo che gli altri thread non vengano influenzati negativamente, in particolare il thread responsabile dell'aggiornamento dell'interfaccia utente; e Pausa brevemente alla fine di ogni importazione per dare più possibilità agli altri thread che necessitano di utilizzare i metodi sincronizzati.
3. I fornitori di contenuti ti costringono a pensare lateralmente a volte
Il modo in cui funzionano i provider di contenuti in Android è fornire un livello di astrazione tra il resto del codice e il database sottostante. Ciò è dovuto principalmente al fatto, per quanto ne so, che i fornitori di contenuti possono accedere ai dati da luoghi diversi dai database.
Ciò significa che non è possibile eseguire query SQL non elaborate sul database sottostante ed è necessario specificare i vari componenti di una query SQL utilizzando variabili passate ai vari metodi come il metodo query. Se hai un'attività che non si adatta al modo in cui SQL viene gestito da un fornitore di contenuti, hai due opzioni:
Pensa lateralmente alla query, forse puoi ottenere i dati di cui hai bisogno con query alternative e accedendo ai risultati dal cursore; e Usa un URI per accedere normalmente ai dati e un URI speciale che viene abbinato a una query specifica per quelle attività che non hanno alternative.