2014-09-10 9 views
5

W moim zgłoszeniu istnieje więcej niż jeden proces, aw każdym procesie potrzebuję dostępu do tej samej bazy danych SQLite (oczywiście, to znaczy więcej niż 2 theads), więc martwiłem się nie tylko o bezpieczeństwie wątków dotyczących SQLite, ale także o bezpieczeństwie procesu.Informacje o bezpieczeństwie Android Sqlite w przypadku wielu procesów

Jednym z rozwiązań dla tego przypadku jest using content-provider. Ale od Androida sdk, it warns that its methods may be called from multiple threads and therefore must be thread-safe. Jeśli dostawca treści nie musi koniecznie oznaczać wątku, jak mogę założyć, że jest bezpieczny dla procesu?

Ponadto, article wyjaśnia, że ​​sama SQLiteDatabase jest zsynchronizowana, co gwarantuje, że żadne dwa wątki nie dotkną jej w tym samym czasie. Co jeśli w przypadku wieloprocesowym? Czy dwa procesy mogą modyfikować tę samą tabelę w tym samym czasie? Czy to się zawiesi? Nie dostaję żadnej odpowiedzi po uruchomieniu google ...

+0

Nie, nie mogą. dostaniesz SQLiteDatabaseLockedException – orium

Odpowiedz

2

Wiele procesów zachowuje się jak wiele wątków, tj. Ich transakcje nie mogą być wzajemnie zakłócane.

+1

Ale z tymi dwoma procesami faktycznie mogę uzyskać 2 wystąpienia SQLiteDatabase, czy spowoduje to potencjalne problemy z bezpieczeństwem wątków lub procesów? – mianlaoshu

+0

Różne procesy mają różne przestrzenie adresowe; dwa obiekty nie widzą się nawzajem. (Widzą tylko blokadę pliku DB.) –

+0

Tak, wiem o tym. Oznacza to, że blokada bazy danych SQLite powinna być globalna dla całego systemu, jeśli jedna aplikacja nabywa blokadę, każda inna aplikacja w innym procesie powinna uzyskać stan "zablokowany", jeśli uzyskuje dostęp do bazy danych, prawda? – mianlaoshu

Powiązane problemy