首页 > 其他 > 详细

内存泄漏

时间:2020-08-24 18:46:52      阅读:84      评论:0      收藏:0      [点我收藏+]

1.匿名内部类造成的内存泄漏

匿名内部类会隐士持有外部类的引用,如果在匿名内部类做耗时操作,可能导致外部类不能被回收,从而导致内存泄漏;
比如:
Activity里面的new Runnable类,里面耗时操作sleep,会导致Activity无法被回收;

解决: 使用静态内部类,static class MyRunnable implements Runnable{}

2.handler引发的内存泄漏

handler的postDelay消息,有可能在Activity finish的时候还没有执行,message会持有handler的引用,handler持有Activity的引用,造成内存泄漏

解决:1)Handler中弱引用Activity,如:

WeakReference<MyActivty> weakReference;

public MyHandler(HandlerActivity activity ){

            weakReference  = new WeakReference<MyActivity>( activity) ;
        }

@Override

handleMessage() {

    if (weakReference.get() != null) {

        // do handle

}

}

2) 需要在onDestory中remove所有的message

 handler.removeCallbacksAndMessages( null );

3.监听器造成的内存泄漏

单例类设置listener,参数是this(即当前的Activity), 
在finish该Activity的时候需要在onDestory中removeListener这个对象

4.TimerTask可能导致内存泄漏

不使用匿名内部类,使用静态内部类的方式

在onDestory中做timerTask.cancel

5.Asynctask可能导致的内存泄漏

不使用匿名内部类,使用静态内部类的方式

在onDestory中调用asyncTask的cancel

 

内存泄漏

原文:https://www.cnblogs.com/SA226343/p/13554756.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!