1.单例引发的内存泄漏
我在项目中涉及到的一个单例是这样的
object LiveCenter {
......
var function: Function1? = null
fun registerListener(function: Function1?) {
this.function = function
}
......
}
LiveCenter注册了一个监听.这个Function1是在Fragment中new了一个实例.这个时候LiveCenter就持有了Fragment的引用导致内存泄漏.所以需要写一个release方法,在release方法中使function=null这个和常说的Context引发内存泄漏其实差不多.这个可以通过Android Studio 自带的Android Profiler.具体用法自己搜吧
2.Fragment作为Listener引发的内存泄漏
有的时候为了方便我们会这么写
public class Instance {
public Instance(Listener listener) {
this.listener = listener;
}
}
public class FragmentA extends BaseFragment implements Listener {
}
这么写很常见,如果只是FragmentA每new一次, Instance也new一次.那么就没啥问题.但如果FragmentA对应的Activity是SingleTask模式.也就是说FragmentA可能会多次整个刷新,导致了每次都new Instance.每次new就多了一个引用导致内存泄漏.所以在这种情况下一定要注意把那个listener置为null
(责任编辑:范老师)