android内存泄露处理总结
导致android发生内存泄露的原因,主要跟activity的生命周期有关,如果某个类持有activity的引用,且它的生命周期是要长于activity的生命周期的,这时就会导致内存泄露。
JVM判断对象是否可以回收主要通过两个算法,引用计数法与可达性分析法,从引用计数法来看,activity的引用依然被其他类所持有,所以不能回收,从可达性分析,此时activity的调用链依然完后,所以也是不能收回的,这样就造成了内存泄露。
内存泄露几大类型
- handler导致内存泄露
- 内部类导致内存泄露
- 线程导致内存泄露
- 单例类导致内存泄露
- 资源未关闭导致内存泄露
handler导致内存泄露
handler会持有activity的引用,如果handler发送延迟消息,在消息还未处理时,activity退出,就会导致内存泄露,比如以下代码:
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);