• 内存泄漏


    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

  • 相关阅读:
    windows2000/xp运行命令全集
    IP数据包的校验和算法C#版(原)
    做系统清理的批处理
    Combox用ValueMember 之后再添加一项
    安装部署基础——Windows Application
    文件编码
    Left/right join 和inner join 区别
    应用Url重写时CSS引用问题
    数据绑定控件单选框
    算法题:水杯倒水的问题
  • 原文地址:https://www.cnblogs.com/SA226343/p/13554756.html
Copyright © 2020-2023  润新知