2012-08-08 14 views
5

Moja aplikacja używa wzorca SyncAdapter, przechowującego poświadczenia użytkownika przy użyciu AccountManager i ContentProvider do przechowywania danych w bazie danych.Usuwanie bazy danych po usunięciu Konta

Po usunięciu account mogę usunąć bazę danych za pomocą metody opisanej w artykule this question Baza danych zostaje usunięta przez:

boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME); 

To działa dobrze, ale kiedy loguję się ponownie, wszystko jest nadal dostępne. Wydaje się, że ContentProvider nie wie, że db został usunięty.

W this answer, inazaruk mówi:

Musisz upewnić się zabić proces, który obsługuje ContentProvider który używa tego konkretnego pliku bazy danych. I tylko usuń go, niż .

Zabicie procesu czyszczenia db nie jest właściwe.

Czy jest coś lepszego?

+0

Dlaczego usunąć plik bazy danych? Czy usunięcie danych z bazy danych nie jest wystarczające? – zapl

+0

@zapl: Tak. Mógłbym zrobić coś w stylu 'delete from table;' – Macarse

Odpowiedz

2

Gdybym miał zrobić to chciałbym spróbować go w następujący sposób:

dodać trochę Uri że po włożeniu lub usunąć przy użyciu tego Uri powoduje usunięcie bazy danych wewnątrz ContentProvider. Podczas usuwania usuwane są również wszystkie odniesienia do SQLiteDatabase, ponieważ możliwe jest, że nadal można uzyskać dostęp do starego pliku bazy danych przez to (Jeśli usuniesz plik w systemie Linux i otworzysz ten plik, nadal możesz go użyć - nie będzie już dostępny przez ścieżka).

Przez umieszczenie usunięcia wewnątrz ContentProvider powinieneś być w stanie zamknąć połączenie z bazą danych i śledzić stan usunięcia w taki sposób, że wiesz, że musisz odtworzyć plik bazy danych.

ContentProviders nie zamknąć, chyba że zabije swoją aplikację więc prawdopodobnie mają tę samą instancję działa i prawdopodobnie odwołania do starego pliku, jak wspomniano powyżej