我正在创建一个应用程序,我正在使用Android Room Persistence 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
意图使我的应用程序了解卸载。我想知道的是,是否有databasebuilder
的配置来完成这项工作,以及在卸载应用程序后数据库是如何存在的。
答案 0 :(得分:8)
是否有数据库构建器的配置来完成工作
AFAIK会议室不知道应用程序是否正在卸载,因此Room
可能不会在卸载时为您擦除数据库。
应用程序卸载后数据库如何保持
从Android 6.0(API级别23)开始,Android提供默认启用的Auto Backup功能。根据文件,它将以下内容备份到谷歌驱动器:
此备份您的房间数据库。
如何停用自动备份
在你的清单中:
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
答案 1 :(得分:0)
@Query("Drop Database myDatabaseName") public void nukeDatabase();
if (activityName.equals("com.android.packageinstaller.UninstallerActivity")) { // User has clicked on the Uninstall button under the Manage Apps settings
第2步对我来说并不是真的。