gpt4 book ai didi

android - 在应用程序卸载时删除房间数据库

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:12 27 4
gpt4 key购买 nike

我正在制作一个应用程序,我正在使用 Android Room Persistence Library 来处理我的数据库层。 Room Library 很有魅力,一切都很好。但我希望在用户卸载应用程序时删除房间创建的数据库。我尝试卸载应用程序然后重新安装,但不知何故数据库仍然存在并且应用程序能够从中获取旧数据。

我想可能是因为我的应用程序数据备份在设置中设置为自动,而 android 正在将其备份到云端并再次将其恢复,但从设置中关闭备份没有帮助。即使这样做对我来说听起来也不是一个好的解决方案。

我创建了一个非常简单的类,它扩展了 RoomDatabase,下面是有助于回答问题的代码。

我知道我可以在数据库构建器上使用 fallbackToDestructiveMigration() 并增加数据库版本。它将清除数据库中的数据。那不是我想要的。

@Database(entities = {UnleashedEntity.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

private static AppDatabase INSTANCE;

public abstract DaoContract MyDao();

public static AppDatabase getAppDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user-database")
.build();
}
return INSTANCE;
}

public static void destroyInstance() {
INSTANCE = null;
}
}

编辑我知道我可以使用 ACTION_PACKAGE_REMOVED Intent 让我的应用知道卸载。我想知道的是,是否有 databasebuilder 的配置可以完成这项工作,以及数据库如何在应用程序卸载后仍然存在。

最佳答案

Is there a configuration of the databasebuilder that does the job

AFAIK room 不知道应用程序正在卸载,因此 Room 可能不会在卸载时为您删除数据库。

How come the database persists after app uninstall

从 Android 6.0(API 级别 23)开始,Android 提供了 Auto Backup默认启用的功能。根据文档,它将以下内容备份到谷歌驱动器:

  • 共享首选项文件。
  • 保存到应用内部存储的文件,可通过 getFilesDir() 或 getDir(String, int) 访问。
  • getDatabasePath(String) 返回的目录中的文件,其中还包括使用 SQLiteOpenHelper 类创建的文件。
  • getExternalFilesDir(String) 返回的目录中的外部存储文件。

这也会备份您的房间数据库。

如何禁用自动备份

在您的 list 中:

<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>

关于android - 在应用程序卸载时删除房间数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49677497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com