删除帐户时删除数据库

Mac*_*rse 5 android android-syncadapter android-account

我的应用程序使用SyncAdapter模式,使用AccountManager和保存用户凭据,以及ContentProvider在数据库中存储数据.

account被删除我可以删除使用方法的分贝在解释这个问题.通过执行以下操作删除数据库:

boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但当我再次登录时,一切仍然存在.感觉就像ContentProvider不知道数据库已被删除.

这个答案中,inazaruk说:

您需要确保已经杀死了托管使用该特定数据库文件的ContentProvider的进程.而且只是删除它.

杀死进程以清除数据库感觉不对.

还有更好的事吗?

zap*_*apl 2

如果我必须这样做,我会尝试以下方式:

添加一些Uri当您插入或删除时使用Uri触发数据库删除的内容ContentProvider。删除时还要清除对 的所有引用,SQLiteDatabase因为您仍然可以通过该文件访问旧数据库文件(如果您在 Linux 中删除文件并且打开​​该文件,您仍然可以使用它 - 只是不再可以通过小路)。

通过将删除内容放入其中,ContentProvider您应该能够关闭数据库连接并以您知道需要重新创建数据库文件的方式跟踪删除状态。

ContentProviders除非您终止应用程序,否则不要退出,因此您可能正在运行相同的实例,并且可能引用上面提到的旧文件