防止handler内存泄漏

内存泄漏:程序运行会用到内存,在退出程序的时候,占用内存的数据没有释放,那么当数据越来越多的时候,就会产生内存泄漏。
handler为什么会内存泄漏呢,handler是个内部类,内部类会持有外部类的引用,内部类需要依赖外部类。handler需要定义为静态类,当你推出Activity,handler还在工作,
下面是引起内存溢出的:Activity已经finish,但handler还在工作

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myhandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                System.out.println("存在");
            }
        }, 1000*60*10);
        finish();
    }
    private Handler myhandler=new Handler(){
        public void handleMessage(android.os.Message msg) {

        };
    };
}   

解决方法:用软引用并用静态内部类

/**
 * 
 * @author Administrator 定义一个内部类时,会默认引用外部类对象的引用,当使用内部类时,使用static定义为静态内部类
 *         引用:强引用(new) 软引用,弱引用
 */
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                System.out.println("存在");
            }
        }, 1000 * 60 * 10);
        finish();
    }

    private  myhanler handler=new myhanler(this);
    private static class myhanler extends Handler {
        WeakReference<MainActivity> activity;
        public myhanler(MainActivity main) {
            activity = new WeakReference<MainActivity>(main);
        }
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            if (activity.get()!= null) {

            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值