更新到adt2.0的开发者们可能会在handler上发现这么一条警告:This Handler class should be static or leaks might occur 。

   首先在ADT 20 Changes我们可以找到这样一个变化:New Lint Checks:

Look for handler leaks: This check makes sure that a handler inner class does not hold an implicit reference to its outer class.

翻译过来就是,Lint会增加一个检查项目即:确保class内部的handler不含有外部类的隐式引用 。

同一个线程下的handler共享一个looper对象,消息中保留了对handler的引用,只要有消息在队列中,那么handler便无法被回收,如果handler不是static那么使用Handler的Service和Activity就也无法被回收。这就可能导致内存泄露。当然这通常不会发生,除非你发送了一个延时很长的消息。

知道了原因我们在来看解决方法:
         1.最不想动代码的同学,可以在Preference搜一下Lint,在Lint Error Checking里搜HandlerLeak,然后选择ignore,然后整个世界清净了。。。。(不推荐)
         2.上面的方法虽然简单,但是肯定不好的。。。给这个检查肯定是有用的,那第二种方法,自然就是把Handler定义成static,然后用post方法把Runnable对象传送到主线程:例。
               

 private static Handler handler;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main); // Create a handler to update the UIhandler = new Handler();}void test() {handler.post(new MyRunnable());// 这样的方法同样可以用 SmsPopupActivity.this.runOnUiThread(new MyRunnalble());来替换,效果是一样的。}static public class MyRunnable implements Runnable {@Overridepublic void run() {imageView.setImageBitmap(downloadBitmap);dialog.dismiss();}} 

3。看到这种方式可能又有很多人不乐意了,原来我一个handler处理多个消息,多舒服,你现在要我把每个消息都换成对应的Runnable对象发送,多不爽。
那我们可以通过弱引用的方式来做,例子如下示:我们首先定义了一个static的inner Class MyHandler然后让它持有Activity的弱引用。这样lint warning就消失了。

static class MyHandler extends Handler {WeakReference<PopupActivity> mActivity;MyHandler(PopupActivity activity) {mActivity = new WeakReference<PopupActivity>(activity);}@Overridepublic 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);}

转自eoe!

android之lint警告This Handler class should be static or leaks might occur相关推荐

  1. Handler内存泄漏问题解决方案(Android,第一行代码,This Handler class should be static or leaks might occur)

    1 问题背景 博主最近在复习<第一行代码>的第10.2.2章节--在子线程中更新UI,书中给出的在UI主线程中用匿名内部类实现Handler的写法如下: private Handler h ...

  2. Android应用开发—如何解决handler的警告:Handler Class Should be Static or Leaks Occur

    转自android handler的警告Handler Class Should be Static or Leaks Occur 在使用Handler更新UI的时候,我是这样写的: public c ...

  3. This Handler class should be static or leaks might occur(null) 解决办法 (转)

    原文链接:http://blog.csdn.net/wuleihenbang/article/details/17126371 首先解释下这句话This Handler class should be ...

  4. [smali] This Handler class should be static or leaks might occur

    相关demo源码; 本文基于: macOS:10.13/AS:3.4/Android build-tools:28.0.0/jdk: 1.8/apktool: 2.3.3 1. Handler内存泄露 ...

  5. 85、android handler的警告Handler Class Should be Static or Leaks Occur

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

  6. Android - 抑制lint的Android XML的警告:tools:ignore

    抑制lint的Android XML的警告:tools:ignore 本文地址:http://blog.csdn.net/caroline_wendy 本文的合集已经编著成书,高级Android开发强 ...

  7. Android源码学习之handler

    前言 是滴!我又来了...今天来讲讲老少皆宜的大名鼎鼎的handler.是的,想必handler这个东西已经被讨论的天花乱坠了,也经常被我们用在实际开发中,但是其中很多细节知识还是值得我们去学习深究的 ...

  8. Android 系统(177)---Android消息机制分析:Handler、Looper、MessageQueue源码分析

    Android消息机制分析:Handler.Looper.MessageQueue源码分析 1.前言 关于Handler消息机制的博客实际上是非常多的了. 之前也是看别人的博客过来的,但是过了一段时间 ...

  9. Android异步处理三:Handler+Looper+MessageQueue深入详解

    本博文地址:http://blog.csdn.net/mylzc/article/details/6771331 转载请注明出处 Android异步处理系列文章索引 Android异步处理一:使用Th ...

最新文章

  1. 命令行运行hadoop实例wordcount程序
  2. linux常见问题解答汇总
  3. mysql如果存在则删除数据库_怎么判断sql数据库是否存在,存在删除
  4. 初学python之路-day10
  5. Spring和MyBatis的整合
  6. 线性系统的基本理论与运算
  7. 电脑文件夹可以分屏的软件_电脑上什么便签软件可以添加音频?
  8. 最新 955 不加班公司名单
  9. Oracle定时任务
  10. ARM架构、指令集、内核版本、CISC与RISC、ARM产品线
  11. php 时辰,时辰算命 - 免费在线算命 - 三藏算命
  12. html向下的三角符号怎么打,哪些字符可用于上/下三角形(无茎的箭头)以HTML显示?...
  13. 第五次任务之三大抽样分布
  14. 洋河梦之蓝M9政府专供 是真是假?
  15. ESP32-S2 SGM58031-热敏电阻电压转温度
  16. 进口产品需要做3c认证么?如何办理?
  17. 如何利用安卓手机运行JAVA代码?
  18. 华为路由器DCHP服务配置实验
  19. 教您如何在Starbucks(星巴克)点咖啡
  20. 干货:如何准备一场面试

热门文章

  1. 演硬汉才是布鲁斯威利斯的正事 --- 我看《虎胆追凶》
  2. 人工智能加速期:“算法为王”还是“场景落地”优先 ?
  3. 人工智能(5)---一文解读人工智能创业的5大坑
  4. 干货丨综述卷积神经网络:从基础技术到研究前景
  5. 现场|除了谷歌AI中国中心成立的重磅消息,谷歌开发者大会现场还有这些
  6. 干货丨一文看懂什么是“自然语言处理”
  7. 美国科学院报告《无止境的前沿:科学的未来75年》
  8. 传感器的“脖子”卡在哪儿?
  9. 第五轮学科评估再提“破五唯”
  10. 互联网大脑进化简史,华为云EI智能体加入-2018年7月新版