android之lint警告This Handler class should be static or leaks might occur
更新到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相关推荐
- Handler内存泄漏问题解决方案(Android,第一行代码,This Handler class should be static or leaks might occur)
1 问题背景 博主最近在复习<第一行代码>的第10.2.2章节--在子线程中更新UI,书中给出的在UI主线程中用匿名内部类实现Handler的写法如下: private Handler h ...
- Android应用开发—如何解决handler的警告:Handler Class Should be Static or Leaks Occur
转自android handler的警告Handler Class Should be Static or Leaks Occur 在使用Handler更新UI的时候,我是这样写的: public c ...
- This Handler class should be static or leaks might occur(null) 解决办法 (转)
原文链接:http://blog.csdn.net/wuleihenbang/article/details/17126371 首先解释下这句话This Handler class should be ...
- [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内存泄露 ...
- 85、android handler的警告Handler Class Should be Static or Leaks Occur
转载:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html 在使用Handler更新UI的时候,我是这样写 ...
- Android - 抑制lint的Android XML的警告:tools:ignore
抑制lint的Android XML的警告:tools:ignore 本文地址:http://blog.csdn.net/caroline_wendy 本文的合集已经编著成书,高级Android开发强 ...
- Android源码学习之handler
前言 是滴!我又来了...今天来讲讲老少皆宜的大名鼎鼎的handler.是的,想必handler这个东西已经被讨论的天花乱坠了,也经常被我们用在实际开发中,但是其中很多细节知识还是值得我们去学习深究的 ...
- Android 系统(177)---Android消息机制分析:Handler、Looper、MessageQueue源码分析
Android消息机制分析:Handler.Looper.MessageQueue源码分析 1.前言 关于Handler消息机制的博客实际上是非常多的了. 之前也是看别人的博客过来的,但是过了一段时间 ...
- Android异步处理三:Handler+Looper+MessageQueue深入详解
本博文地址:http://blog.csdn.net/mylzc/article/details/6771331 转载请注明出处 Android异步处理系列文章索引 Android异步处理一:使用Th ...
最新文章
- 命令行运行hadoop实例wordcount程序
- linux常见问题解答汇总
- mysql如果存在则删除数据库_怎么判断sql数据库是否存在,存在删除
- 初学python之路-day10
- Spring和MyBatis的整合
- 线性系统的基本理论与运算
- 电脑文件夹可以分屏的软件_电脑上什么便签软件可以添加音频?
- 最新 955 不加班公司名单
- Oracle定时任务
- ARM架构、指令集、内核版本、CISC与RISC、ARM产品线
- php 时辰,时辰算命 - 免费在线算命 - 三藏算命
- html向下的三角符号怎么打,哪些字符可用于上/下三角形(无茎的箭头)以HTML显示?...
- 第五次任务之三大抽样分布
- 洋河梦之蓝M9政府专供 是真是假?
- ESP32-S2 SGM58031-热敏电阻电压转温度
- 进口产品需要做3c认证么?如何办理?
- 如何利用安卓手机运行JAVA代码?
- 华为路由器DCHP服务配置实验
- 教您如何在Starbucks(星巴克)点咖啡
- 干货:如何准备一场面试
热门文章
- 演硬汉才是布鲁斯威利斯的正事 --- 我看《虎胆追凶》
- 人工智能加速期:“算法为王”还是“场景落地”优先 ?
- 人工智能(5)---一文解读人工智能创业的5大坑
- 干货丨综述卷积神经网络:从基础技术到研究前景
- 现场|除了谷歌AI中国中心成立的重磅消息,谷歌开发者大会现场还有这些
- 干货丨一文看懂什么是“自然语言处理”
- 美国科学院报告《无止境的前沿:科学的未来75年》
- 传感器的“脖子”卡在哪儿?
- 第五轮学科评估再提“破五唯”
- 互联网大脑进化简史,华为云EI智能体加入-2018年7月新版