美文网首页
Handler清空队列

Handler清空队列

作者: 海卓001 | 来源:发表于2019-07-19 17:13 被阅读0次

Android开发经常会用到handler,但是我们发现每次使用Handler都会出现:This Handler class should be static or leaks might occur(null)这样的提示。Android lint就是为了提示我们,这样使用Handler会容易造成内存泄漏。但是你会发现其实改成static并没有什么用。因为这并没有解决这个问题的根本。

因为Handler是基于消息的。每次new 出Handler,都会创建一个消息队列用于处理你使用handler发送的消息。正常消息还好,延时消息有很大可能造成内存泄漏。举个例子,我在一个activity里给他的handler发送延时消息,在没有设置横竖屏切换不新建的情况下使劲的横竖屏切换。

public class DemoActivity extends Activity {

    private Handler mHandler;

    protected void onCreate(Bundle savedInstanceState) {

        mHandler = new Handler();

         mHandler.postDelayed(new Runnable() { Log.i(" DemoActivity ","-----------postDelayed-------"); }, 50000);

    }

}

看一下源码,不管你post的是Runnable还是正常Message或者EmptyMessage,最后都是Message放入消息队列里面。

所以我们直接在onDestroy中调用一下回收

handler.removeCallbacksAndMessages(null);

相关文章

网友评论

      本文标题:Handler清空队列

      本文链接:https://www.haomeiwen.com/subject/cipslctx.html