我的应用使用SyncAdapter
模式,使用AccountManager
和ContentProvider
保存用户凭据,以便在数据库中存储数据。
当account
被删除后,我可以使用this question中解释的方法删除数据库。通过执行以下操作删除数据库:
boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME);
这很好但是当我再次登录时,一切都还在那里。感觉ContentProvider
不知道数据库已被删除。
在this answer,inazaruk说:
您需要确保已经杀死了托管的进程 ContentProvider使用该特定数据库文件。而且只有 删除它。
杀死进程以清除数据库感觉不对。
有更好的事情要做吗?
答案 0 :(得分:2)
如果我必须这样做,我会尝试以下方式:
在Uri
内使用Uri
触发器数据库删除插入或删除时添加一些ContentProvider
。删除时也清除对SQLiteDatabase
的所有引用,因为您仍然可以通过它访问旧的数据库文件(如果您在Linux中删除文件并打开该文件,您仍然可以使用它 - 它只是不再通过路径访问)。
通过将删除放在ContentProvider
中,您应该能够关闭数据库连接并以您知道需要重新创建数据库文件的方式跟踪删除状态。
ContentProviders
不要退出,除非你杀了你的应用程序,所以你可能有相同的实例运行,并且可能引用了上面提到的旧文件