Android中Fragment类内部定义的静态变量生命周期是怎样的?
问题解答
静态变量生命周期结论
你代码中定义的isCompleted静态变量作用域等同于整个应用进程的生命周期,不会随Fragment实例销毁同步销毁,只有整个应用进程被系统回收时才会被释放。
核心原因
- 静态变量属于类本身,而非类的实例对象。只要
AbstractFragment类被应用的类加载器加载到内存中,对应的静态变量就会一直存在,和你创建了多少个AbstractFragment子类的实例、这些实例是否被销毁没有关联。 - Android平台的类加载是进程级别的,只要应用进程还在运行,类的静态存储区就不会被回收。哪怕你销毁了所有
AbstractFragment子类的实例、甚至销毁了承载这些Fragment的Activity,isCompleted的值都会一直保留。
使用建议
如果没有全局共享的强需求,不建议在Fragment中定义静态变量存储状态,很容易出现内存泄漏和业务逻辑异常:
- 如果是单个Fragment实例的自有状态,直接定义为非静态成员变量即可,变量会随Fragment实例的销毁同步回收。
- 如果需要跨多个Fragment共享状态,更推荐通过宿主Activity的成员变量、或者生命周期感知的ViewModel组件实现,可以避免静态变量长期驻留内存的问题。
内容的提问来源于stack exchange,提问作者Anushiya
相关产品推荐
相关产品推荐

