zoukankan      html  css  js  c++  java
  • This Handler class should be static or leaks might occur(null) 解决办法 (转)

       原文链接:http://blog.csdn.net/wuleihenbang/article/details/17126371

      首先解释下这句话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嵌套类,并且使用对外部类的弱应用。

      

      使用范例:

     1 static class MyHandler extends Handler {
     2     WeakReference<PopupActivity> mActivity;
     3
     4     MyHandler(PopupActivity activity) {
     5       mActivity = new WeakReference<PopupActivity>(activity);
     6     }
     7    
     8     @Override
     9     public void handleMessage(Message msg) {
    10       PopupActivity theActivity = mActivity.get();
    11        switch (msg.what) {
    12        case 0:
    13          theActivity.popPlay.setChecked(true);
    14          break;
    15        }
    16     }
    17 }
    18    
    19    MyHandler ttsHandler = new MyHandler(this);
    20    private Cursor mCursor;
    21    
    22    private void test() {
    23         ttsHandler.sendEmptyMessage(0);
    24   }

      

      WeakReference则类似于可有可无的东西。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存,说白了就是一个没那么strong要求垃圾回收器将一个对象保留在内存中。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

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

  • 相关阅读:
    和菜鸟一起学android4.0.3源码之硬件gps简单移植
    Android学习笔记(三一):线程:Message和Runnable
    Android Runnable 运行在那个线程
    Android 的消息队列模型
    iOS开发UI篇—iOS开发中三种简单的动画设置
    ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明
    ios开发UI篇—Kvc简单介绍
    iOS开发UI篇—从代码的逐步优化看MVC
    iOS开发UI篇—字典转模型
    iOS开发UI篇—九宫格坐标计算
  • 原文地址:https://www.cnblogs.com/laishenghao/p/5134276.html
Copyright © 2011-2022 走看看