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
  • 982

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

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

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

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html 在使用Handler更新UI的时候,我是这样写的...

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
  • 1842

去除烦人的This Handler class should be static or leaks might occur

消灭This Handler class should be static or leaks might occur

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

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

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

原文出处:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html 在使用Handl...

Android“This Handler class should be static or leaks might occur”警告的处理方法

最近用到handle在线程中改变UI,会跟给出“This Handler class should be static or leaks might occur”的警告,网上看了很多解决办法,但都不够...

AsyncTask我来给你扯会蛋

AsyncTask我们平时用的再熟悉不过了,让我们说的话,它是一个什么东东?我个人的理解是它是一个Thread+handler来实现的一个简单的更新UI的这个一个东西,不过这中说话应该不会让人信服。接...

Android中的Activitys, Threads和内存泄露

阅读目录 Handler Thread Activity 常见泄露与解决办法 Android编程中一个共同的困难就是协调Activity的生命周期和长时间运行的任务(task),并且要避免可能...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:This Handler class should be static or leaks might occur 解决办法
举报原因:
原因补充:

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