You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改应用运行时存储权限后无法读取内存数据报NullPointerException求助

问题根因
  1. 安卓系统原生逻辑:应用运行过程中,你跳转到系统设置修改存储这类敏感权限时,系统会直接销毁当前应用的后台进程。等你切回应用时,系统只会自动恢复最近的Activity栈,并不会恢复进程被杀前的内存数据。
  2. 你当前将LanguageInitBean存储在LanguageInitCache类的静态变量中,静态变量的生命周期完全和应用进程绑定,进程被杀后内存会被全部回收,新启动的进程里这个静态变量默认就是null。
  3. 进程重建后你没有重新执行初始化逻辑给这个静态变量赋值,直接访问它的data字段,就会抛出对应的空指针异常。
修复方案
  • 所有访问LanguageInitCache.languageInitBean的位置必须先做空判断,为空时触发重初始化逻辑:要么跳转回启动页重新拉取接口解析赋值,要么读取本地持久化存储的配置恢复静态变量,参考示例:
// 访问前先判空
if (LanguageInitCache.languageInitBean != null) {
    LanguageInitBean.Data data = LanguageInitCache.languageInitBean.data;
    // 执行业务逻辑
} else {
    // 走重新初始化逻辑
    reInitLanguageConfig();
}
  • 核心配置类数据不要仅靠静态变量做内存存储,将LanguageInitBean序列化后存入MMKV、SharedPreferences或者本地文件做持久化,每次应用冷启动、进程重建时优先从本地读取数据恢复静态缓存,不需要每次都重新请求接口。
  • 可以在基类Activity的onCreate方法中增加进程重建校验逻辑:如果核心静态缓存为空,说明当前是进程被杀后的重建场景,直接拦截当前页面跳转,先走完整的应用初始化流程,避免后续业务逻辑连续报错。

内容的提问来源于stack exchange,提问作者ningzhaobin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:45:01