我正在制作一个应用程序,我正在使用Android Room Persistence Library来处理我的数据库层 . 房间图书馆就像魅力一样,一切都很好 . 但我希望在用户卸载应用程序时删除会创建的数据库 . 我尝试卸载应用程序,然后再次安装,但不知何故数据库仍然存在,应用程序能够从中获取旧数据 .
我想也许是因为我的应用程序数据备份在设置中设置为自动,并且android在 Cloud 上备份并再次将其恢复,但关闭备份设置并没有帮助 . 即使这样做对你来说听起来不是一个好的解决方案 .
我创建了一个非常简单的类,扩展了 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;
}
}
Edit 我知道我可以使用 ACTION_PACKAGE_REMOVED
intent让我的应用程序知道卸载 . 我想知道的是,是否有 databasebuilder
的配置来完成这项工作,以及在卸载应用程序后数据库是如何存在的 .
2 回答
AFAIK房间不知道应用程序正在卸载所以
Room
可能不会在卸载时为您擦除数据库 .从Android 6.0(API级别23)开始,Android提供默认启用的Auto Backup功能 . 根据文件,它备份以下谷歌驱动器:
共享首选项文件 .
文件保存到应用程序的内部存储,由getFilesDir()或getDir(String,int)访问 .
getDatabasePath(String)返回的目录中的文件,其中还包含使用SQLiteOpenHelper类创建的文件 .
getExternalFilesDir(String)返回的目录中的外部存储上的文件 .
这也备份你的房间数据库 .
How to disable auto backup
在你的清单中:
使您的应用程序卸载意识如answer中所描述的那样AnniJais .
使用删除数据库的@Query Annotation在Dao中创建一个方法 .
第2步并不是我的真实情况 .