关于handler的用法(防止内存泄露)

今天看了一篇文章,讲的内存泄露的问题,其中提到了handler,讲的清晰明了,就把代码复制下来,贴在这里,以后用的时候直接拿来。。

public class LeakAty extends Activity {    
    private TextView tvResult;    private MyHandler handler;    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.aty_leak);
            tvResult = (TextView) findViewById(R.id.tvResult);
            handler = new MyHandler(this);
            fetchData();
    }    
    //第一步,将Handler改成静态内部类。
    private static class MyHandler extends Handler {        
        //第二步,将需要引用Activity的地方,改成弱引用。
        private WeakReference<LeakAty> atyInstance; 

        public MyHandler(LeakAty aty) {            
            this.atyInstance = new WeakReference<LeakAty>(aty);
        }
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            LeakAty aty = atyInstance == null ? null : atyInstance.get();            
            //如果Activity被释放回收了,则不处理这些消息
            if (aty == null||aty.isFinishing()) {
                return;
            }
            aty.tvResult.setText("fetch data success");
        }
    }
    private void fetchData() {        // 获取数据
        handler.sendEmptyMessage(0);
    }
    @Override
    protected void onDestroy() {        //第三步,在Activity退出的时候移除回调
        super.onDestroy();
        handler.removeCallbacksAndMessages(null);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值