码迷,mamicode.com
首页 > 其他好文 > 详细

Handler的正确写法

时间:2015-05-19 22:39:54      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:handler   内存泄露   

Handler我们常常用于通知主线程做相对应的操作,但是如果使用不但的话就会造成内存泄露,所以记录写正确的Handler写法。

Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            //do something
        };
    };
handler.sendEmptyMessageDelayed(0, 100 * 1000);

像上面的代码片段,就会存在内存泄露的风险,因为handler占着Acitvity的引用阻止了系统进行GC回收操作。

private static class MyHandler extends Handler {
        WeakReference<MainActivity> mWeakReferenceActivity;
        public MyHandler(MainActivity activity) {
            mWeakReferenceActivity = new WeakReference<MainActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (null != mWeakReferenceActivity) {
                MainActivity _activity = mWeakReferenceActivity.get();
                //_activity.dosomething();
            }
        }
    }

正确的做法是WeakReference存放存入的Activity,这样在Activity结束回收的时候WeakReference不会阻止系统进行回收操作,能有效的避免因为handler引起的内存泄露风险。
当然你使用handler那种写法也不是不行的,需要你在结束Activity的时候handler.removeCallbacksAndMessages(null);让系统能够正常进行回收操作。

Handler的正确写法

标签:handler   内存泄露   

原文地址:http://blog.csdn.net/neacy_zz/article/details/45850349

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!