This Handler class should be static or leaks might occur 解决办法

转载 2013年12月04日 21:23:48
首先解释下这句话This Handler class should be static or leaks might occur,大致意思就是说:Handler类应该定义成静态类,否则可能导致内存泄露。

具体如何解决,在国外有人提出,如下:

Issue: Ensures that Handler classes do not hold on to a reference to an outer class

In Android, Handler classes should be static or leaks might occur. Messages enqueued on the application thread's MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class.

大体翻译如下:

Handler 类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那 么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。

使用范例:

static class MyHandler extends Handler {
                WeakReference<PopupActivity> mActivity;
   
                MyHandler(PopupActivity activity) {
                        mActivity = new WeakReference<PopupActivity>(activity);
                }
   
                @Override
                public void handleMessage(Message msg) {
                        PopupActivity theActivity = mActivity.get();
                        switch (msg.what) {
                        case 0:
                                theActivity.popPlay.setChecked(true);
                                break;
                        }
                }
        }
   
        MyHandler ttsHandler = new MyHandler(this);
        private Cursor mCursor;
   
        private void test() {
                ttsHandler.sendEmptyMessage(0);
        }
WeakReference则类似于可有可无的东西。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存,说白了就是一个没那么strong要求垃圾回收器将一个对象保留在内存中。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

参考文章:http://www.cnblogs.com/jevan/p/3168828.html

警告handler leaks的解决方法

发现所有的Handler都被打上了”This Handler class should be static or leaks might occur ..”的警告, Google一番后发现了解决方法....
  • a910626
  • a910626
  • 2016年05月25日 17:46
  • 1423

Android之“Handler内部类引起的内存溢出警告”

在使用Handler异步操作并返回结果更新UI的时候,Android lint提示警告:This Handler class should be static or leaks might occur...
  • kingoneyun
  • kingoneyun
  • 2017年04月13日 15:47
  • 484

关于This Handler class should be static or leaks might occur的解决办法

今天在使用定时器的时候使用到了Handler,且使用如下 Handler handler = new Handler(){ @Override publ...
  • lovecjj19910205
  • lovecjj19910205
  • 2015年11月26日 23:35
  • 283

This Handler class should be static or leaks might occur 解决方法

转自 http://www.eoeandroid.com/thread-184245-1-1.html    更新到adt2.0的开发者们可能会在handler上发现这么一条警告:This Han...
  • zz880329
  • zz880329
  • 2013年06月07日 14:33
  • 6308

关于Handler 使用This Handler class should be static or leaks might occur 警告处理

以前在写代码的时候,对于一些警告信息不是很在意,大致看了一下,自己知道就行了,有时候烦了就干脆屏蔽掉算了,今天我在使用handler的时候看了一下,这个感觉这个警告还是很重要的,于是就看了一下警告的出...
  • xiwenhec
  • xiwenhec
  • 2015年12月02日 22:53
  • 3638

This Handler class should be static or leaks may occur (anonymous android.os.Handler)

如果在 Activity 中使用了非静态的匿名 Handler 类,lint 会提示 This Handler class should be static or leaks may occur (a...
  • banxiali
  • banxiali
  • 2016年05月25日 01:24
  • 377

Android中Handler引起的内存泄露

Android中Handler引起的内存泄露 在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。通常我们的代码会这样实现。 123456789 pub...
  • wdd1324
  • wdd1324
  • 2017年06月13日 11:01
  • 105

Android handler的警告Handler Class Should be Static or Leaks Occur

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html 在使用Handler更新UI的时候,我是这样写的...
  • jaycee110905
  • jaycee110905
  • 2015年06月04日 12:06
  • 762

This Handler class should be static or leaks might occur 解决办法

首先解释下这句话This Handler class should be static or leaks might occur,大致意思就是说:Handler类应该定义成静态类,否则可能导致内存泄露...
  • lizhenmingdirk
  • lizhenmingdirk
  • 2015年06月01日 16:44
  • 1088

This Handler class should be static or leaks might occur,Handler和Context使用的注意事项!

This Handler class should be static or leaks might occur,Handler和Context使用的注意事项!
  • catoop
  • catoop
  • 2015年07月25日 22:16
  • 2047
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:This Handler class should be static or leaks might occur 解决办法
举报原因:
原因补充:

(最多只允许输入30个字)