Redmi Note 10S启动App闪退报WorkManager无法访问内部存储错误如何解决
问题根因
从崩溃日志可以定位到核心问题:WorkManager默认存放内部数据库的/data/user/0/[你的包名]/no_backup目录在Android 11系统的Redmi Note 10S设备上未被系统自动创建,导致WorkManager初始化时无法打开对应SQLite数据库,触发闪退。
这个问题是部分小米/Redmi设备在Android 11版本上的已知兼容性问题,低版本WorkManager没有对目录不存在的场景做兼容处理,所以会直接抛出异常。
修复方案
- 方案1:升级WorkManager版本
这是成本最低的修复方案,WorkManager从2.7.0版本开始已经官方修复了该问题,会在初始化时自动检测并创建缺失的no_backup目录。直接将依赖版本升级到2.7.0及以上的稳定版即可,示例依赖配置:dependencies { implementation "androidx.work:work-runtime:2.8.1" // Kotlin协程版本用下面的依赖 // implementation "androidx.work:work-runtime-ktx:2.8.1" } - 方案2:手动创建缺失目录(适合无法升级WorkManager版本的场景)
在应用Application的onCreate方法中,WorkManager初始化之前,提前手动创建no_backup目录即可,该目录属于应用内部私有目录,不需要申请额外存储权限,代码示例:// Java版本 File noBackupDir = new File(getApplicationContext().getFilesDir().getParent(), "no_backup"); if (!noBackupDir.exists()) { noBackupDir.mkdirs(); }// Kotlin版本 val noBackupDir = File(applicationContext.filesDir.parent, "no_backup") if (!noBackupDir.exists()) { noBackupDir.mkdirs() } - 方案3:临时验证方案
测试阶段可以直接卸载设备上的旧应用后重新安装,部分场景是应用之前异常卸载导致的目录异常问题,重装可以临时验证问题触发逻辑,但该方法不适合线上用户使用。
内容的提问来源于stack exchange,提问作者Bhavesh Jabuvani
相关产品推荐
相关产品推荐

