Удаление базы данных при удалении учетной записи

Мое приложение использует шаблон SyncAdapter, храня учетные данные пользователя, используя AccountManager и ContentProvider для хранения данных в БД.

Когда account удаляется, я могу удалить базу данных, используя подход, описанный в этом вопросе. БД удаляется, выполнив:

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

Это работает нормально, но когда я снова вхожу в систему, все по-прежнему там. Такое ощущение, что ContentProvider не знает, что БД была удалена.

В этом ответе Иназарук говорит:

Вам нужно убедиться, что вы убили процесс, в котором размещается ContentProvider, который использует этот конкретный файл базы данных. И только потом удалять.

Убивать процесс, чтобы очистить БД, не кажется правильным.

Есть ли что-нибудь получше?


person Macarse    schedule 08.08.2012    source источник
comment
Зачем удалять файл базы данных? Не достаточно ли удалить данные из базы данных?   -  person zapl    schedule 08.08.2012
comment
@zapl: Ага. Я мог бы сделать что-то вроде delete from table;   -  person Macarse    schedule 08.08.2012


Ответы (1)


Если бы мне пришлось это сделать, я бы попробовал это следующим образом:

добавьте некоторые Uri, которые при вставке или удалении с помощью этого Uri запускают удаление базы данных внутри вашего ContentProvider. При удалении также удалите все ссылки на SQLiteDatabase, так как возможно, что вы все еще можете получить доступ к старому файлу базы данных через него (если вы удалите файл в Linux, и у вас есть этот файл, вы все еще можете использовать его - он просто больше не доступен через тропинка).

Поместив удаление в ContentProvider, вы сможете закрыть соединение с базой данных и отслеживать состояние удаления таким образом, чтобы вы знали, что вам нужно воссоздать файл базы данных.

ContentProviders не выходите, если вы не убьете свое приложение, поэтому у вас, вероятно, запущен тот же экземпляр и, возможно, ссылки на старый файл, как указано выше.

person zapl    schedule 08.08.2012