卸载应用后仍存缓存?Android应用代码更新及ViewModel数据残留问题
问题解决方案
一、重新安装应用后代码修改未生效
- 关闭Android Studio的「Apply Changes」功能:该功能的增量构建缓存可能导致代码更新不生效,直接用「Run」按钮重新部署,或者在
Settings -> Build, Execution, Deployment -> Instant Run里关闭该功能。 - 清理设备端应用缓存与数据:在三星F21 FE的设置中,进入「应用」找到你的应用,选择「存储」,点击「清理缓存」和「清理数据」后再重新安装。
- 强制清理项目构建缓存:在Android Studio中执行
Build -> Clean Project,接着执行Build -> Rebuild Project,确保构建产物完全更新。 - 关闭自动备份功能:Android 12及以上默认开启应用数据自动备份,重新安装时会恢复旧数据。在
AndroidManifest.xml的<application>标签中添加android:allowBackup="false",测试阶段建议关闭该功能。
二、ViewModel 残留旧数据(进程杀死后仍存在)
- 检查Dagger 2注入的ViewModel作用域:绝对不能给ViewModel添加
@Singleton注解,单例ViewModel会在整个应用进程生命周期内存在,不受Activity生命周期控制。 - 改用ViewModelProvider获取实例:BaseActivity中不要直接通过Dagger注入ViewModel实例,应该通过
ViewModelProvider结合自定义的ViewModelFactory来获取。示例代码:
其中// 在BaseActivity中 val viewModel: YourViewModel by viewModels { DaggerViewModelFactory.create(application) }ViewModelFactory通过Dagger注入所需依赖,而非直接注入ViewModel单例。 - 手动清理ViewModel数据(可选):如果需要在Activity销毁时清理特定数据,可以在BaseActivity的
onDestroy()中调用ViewModel的自定义清理方法,比如:
注意:正常情况下,非单例ViewModel会在Activity销毁时被系统自动回收,若仍残留数据,大概率是作用域设置错误。override fun onDestroy() { super.onDestroy() viewModel.clearData() }
内容的提问来源于stack exchange,提问作者Vj sarathi
相关产品推荐
相关产品推荐

