Sam*_*Sam 11 android android-room
我正在制作一个应用程序,我正在使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
我知道我可以使用ACTION_PACKAGE_REMOVED意图让我的应用程序知道卸载.我想知道的是,是否有配置databasebuilder可以完成工作,以及数据库在卸载后如何保留.
Wei*_*zhi 12
是否有数据库构建器的配置来完成这项工作
AFAIK房间不知道应用程序正在卸载所以Room可能不会在卸载时为您擦除数据库.
为什么数据库在卸载应用程序后仍然存在
从Android 6.0(API级别23)开始,Android提供默认启用的自动备份功能.根据文件,它备份以下谷歌驱动器:
这也备份你的房间数据库.
如何禁用自动备份
在你的清单中:
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)@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步并不是对我的真正考验。
| 归档时间: |
|
| 查看次数: |
4399 次 |
| 最近记录: |