Handler使用和内存泄漏解决办法

Handler是Android用于线程间通信的机制,使用方法:

 1,在主线程(Activity)中创建Handler对象


 //在创建的时候加上static,内部类引用非静态内部类的对象会造成内存泄漏
 public static Handler handler = new Handler(){
        //这个回调方法,接收到子线程中发送过来的msg
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 2:
                    Log.d("TAG",msg.toString());
                    break;
            }
        }
    };

2.开启子线程,发送消息给主线程

Thread th;
    private void load() {

        th = new Thread(new Runnable() {
             public Message msg = handler.obtainMessage();
             @Override
             public void run() {
                 msg.obj = "我来自子线程";
                 msg.what = 2;
                 handler.sendMessage(msg);
             }
         });
        th.start();
    }

3.在onDestory方法中移除线程的任务,释放内存

 @Override
    protected void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(th);
    }

注意:
1.在Activity中内部实现了Looper.prepare()和Looper.loop()方法
2.创建Handler对象的时候要加static,因为Message中持有了Handler对象,当消息(message)没有取消的时候,会一直持有造成内存泄漏。
3.在onDestory中要记得释放handler。
4.对Handler对象使用弱引用




下一篇:Android中的Handler机制源码解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值