2014-09-10 15 views
5

Nella mia applicazione, esiste più di un processo e in ogni processo, ho bisogno di accedere allo stesso database SQLite (ovviamente, significa più di 2 thead), quindi mi preoccupo non solo sulla sicurezza del thread relativa a SQLite, ma anche sulla sicurezza del processo.Informazioni su Android Sicurezza Sqlite in caso di multi processo

Una soluzione per questo caso è using content-provider. Ma da Android SDK, it warns that its methods may be called from multiple threads and therefore must be thread-safe. Se il content provider stesso non significa necessariamente thread-safe, come posso presumere che sia sicuro per il processo?

Il article chiarisce anche che SQLiteDatabase stesso è sincronizzato per impostazione predefinita, garantendo così che due thread non lo tocchino mai nello stesso momento. Cosa succede se nel caso multi-processo? Due processi possono modificare contemporaneamente la stessa tabella? Crollerà? Non ottengo alcuna risposta dopo la ricerca su Google ....

+0

no, non possono. otterrete SQLiteDatabaseLockedException – orium

risposta

2

Più processi si comportano proprio come più thread, cioè le loro transazioni sono al sicuro dall'essere interferite l'una dall'altra.

+1

Ma con i due processi, potrei effettivamente ottenere 2 istanze SQLiteDatabase, causerà potenziali problemi sulla sicurezza del thread o del processo? – mianlaoshu

+0

Diversi processi hanno spazi di indirizzi diversi; i due oggetti non possono nemmeno vedersi. (Vedono solo il blocco sul file DB.) –

+0

Sì, lo so. Significa che il blocco del database SQLite dovrebbe essere globale per l'intero sistema, se un'app acquisisce il blocco, qualsiasi altra applicazione in un altro processo dovrebbe ottenere uno stato "bloccato" se si accede al DB, giusto? – mianlaoshu