Activity持有Fragment实例导致内存泄露

148 阅读1分钟

背景:

一个Activity里强引用持有了四个Fragment实例,当时为了方便快速切换这四个fragment。但是在Activity的onDestory方法回调里没有给这四个Fragment实例赋值为空,导致内存泄露。

val mFragments: Array<BaseFragment<*, *>> = arrayOf(
    AFragment(),
    BFragment(),
    CFragment()
)

解决方案

在Activity的onDestory时候把Fragment数组清空

val mFragments: Array<BaseFragment<*, *>?> = arrayOf(
    AFragment(),
    BFragment(),
    CFragment()
)

override fun onDestroy() {
    super.onDestroy()
    mFragments.fill(null) //清空Fragment数组
}