Android 开发日志——Handler引起内存泄漏
来源:互联网 发布:数据库分为哪几种 编辑:程序博客网 时间:2024/05/29 08:43
在Activity中定义了一个内部Handler类,如下代码:
public class MainActivity extends Activity { private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { //TODO handle message... } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler.sendMessageDelayed(Message.obtain(), 60000); //just finish this activity finish(); }}
运行Android Lint工具会有一个内存泄露警告:
原因是:
当Android应用启动的时候,会先创建一个应用主线程的Looper对象,Looper实现了一个简单的消息队列,一个一个的处理里面的Message对象。主线程Looper对象在整个应用生命周期中存在。
当在主线程中初始化Handler时,该Handler和Looper的消息队列关联。发送到消息队列的Message会引用发送该消息的Handler对象,这样系统可以调用 Handler#handleMessage(Message) 来分发处理该消息。
在Java中,非静态(匿名)内部类会引用外部类对象。而静态内部类不会引用外部类对象。
如果外部类是Activity,则会引起Activity泄露 。
要修改该问题,只需要按照Lint提示的那样,把Handler类定义为静态即可,然后通过WeakReference 来保持外部的Activity对象。
所以,当你在Activity中使用内部类的时候,需要时刻考虑您是否可以控制该内部类的生命周期,如果不可以,则最好定义为静态内部类。
0 0
- Android 开发日志——Handler引起内存泄漏
- android Handler引起内存泄漏
- Android开发常见问题之Handler引起的内存泄漏
- Android开发-Handler引起的内存泄漏-实验、分析、总结。
- Android开发-Handler引起的内存泄漏-实验、分析、总结。
- Android handler 引起的内存泄漏
- Android开发——Handler引起的内存泄露
- 关于Android中Handler引起内存泄漏问题
- Android开发--Handler引起的内存泄露
- Android开发 Handler引起的内存泄露
- Android —— 解决MVP引起的内存泄漏
- 解决由Handler 引起的内存泄漏
- 安卓-Handler引起的内存泄漏
- Handler使用引起内存泄漏分析
- Handler引起的内存泄漏解决办法
- Android Handler 内存泄漏
- Android Handler内存泄漏
- 内存泄漏检测工具和Handler引起的内存泄漏问题
- Nginx and PHP-FPM Configuration and Optimizing Tips and Tricks
- Spring DAO vs Spring ORM vs Spring JDBC
- 使用Maven
- 华为机试之含23数字排序输出
- 一个google面试的准备清单
- Android 开发日志——Handler引起内存泄漏
- android___测试Test
- FilesCodingConvert--批量文件编码格式转换工具
- LA 4080 Warfare And Logistics 战争和物流 dijkstra 最短路树
- 内核链表containerof()
- Python两个内置函数——locals 和globals (学习笔记)
- Android问题集(七)——TableLayout 中让TableRow中的控件填充满整列
- ubuntu+ROS+kinect进行骨架跟踪
- 写给C语言初学者的话