首页 文章

在app uninstall上删除房间数据库

提问于
浏览
6

我正在制作一个应用程序,我正在使用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 回答

  • 0

    是否有数据库构建器的配置来完成这项工作

    AFAIK房间不知道应用程序正在卸载所以 Room 可能不会在卸载时为您擦除数据库 .

    卸载应用后数据库如何保留

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

    • 共享首选项文件 .

    • 文件保存到应用程序的内部存储,由getFilesDir()或getDir(String,int)访问 .

    • getDatabasePath(String)返回的目录中的文件,其中还包含使用SQLiteOpenHelper类创建的文件 .

    • getExternalFilesDir(String)返回的目录中的外部存储上的文件 .

    这也备份你的房间数据库 .

    How to disable auto backup

    在你的清单中:

    <manifest ... >
        ...
        <application android:allowBackup="false" ... >
            ...
        </application>
    </manifest>
    
  • 5
    • 使您的应用程序卸载意识如answer中所描述的那样AnniJais .

    • 使用删除数据库的@Query Annotation在Dao中创建一个方法 .

    @Query(“删除数据库myDatabaseName”)
    public void nukeDatabase();

    • 在之前添加的部分中调用您的Dao方法:

    if(activityName.equals(“com.android.packageinstaller.UninstallerActivity”)){//用户点击了管理应用设置下的卸载按钮

    第2步并不是我的真实情况 .

相关问题