Android 消息传递Handler的正确用法
来源:互联网 发布:网络大电影受众分析 编辑:程序博客网 时间:2024/05/21 10:55
Android 消息传递Handler的正确用法
andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
Handler使用不当很可能导致内存泄漏,如:
Handler handler=new Handler() { public void handleMessage(android.os.Message msg) { //do something }; };
则会报出警告
顾名思义可能会发生内存泄漏,为什么会导致内存泄漏:
由于非静态内部类会持有外部类对象的引用,而Handler又由于Message处理的方式有可能常驻内存当中。这样就会导致外部的Activity或者Service在销毁之后无法及时被GC回收,甚至内存泄漏。
那么我们需要怎么去解决这个内存泄漏?
public static class XXXHandler extends Handler {//弱引用 WeakReference<MainActivity> mActivity;XXXHandler(MainActivity activity){mActivity=new WeakReference<MainActivity>(activity);}@Overridepublic void handleMessage(Message msg) {//更新UI操作MainActivity theActivity = mActivity.get(); theActivity.timeUIUpdate();}}
由于静态内部类不能直接调用外部类对象(this)相关成员,加上WeakRefrence的机制,基本上可以避免出现泄漏的情况。
0 0
- Android 消息传递Handler的正确用法
- Android消息传递之Handler的简单用法
- Android的Handler消息传递机制
- 解析Android的 消息传递机制Handler
- 解析Android的 消息传递机制Handler
- Android的Handler消息传递机制
- 解析Android的消息传递机制Handler
- Android Handler 的消息传递机制
- Android的Handler消息传递机制
- Android的Handler消息传递机制
- Android 的消息机制(Handler消息传递机制)
- Android Handler消息传递机制
- Android Handler消息传递机制
- android Handler 消息传递机制
- Android Handler消息传递机制
- android Handler 消息传递机制
- Android:Handler消息传递机制
- Android Handler消息传递机制
- ToolkitImage转换为BufferedImage
- 数据结构---栈
- 驱动申请大块内存
- 2.1穷竭搜索
- Flex(弹性布局)学习笔记。
- Android 消息传递Handler的正确用法
- 写高质量OC代码52建议总结:33.以弱引用避免保留环
- ArcGIS构建网络数据集步骤
- 我希望进入大学时就能知道的一些事儿
- caffe学习笔记--5---matlab的可视化
- POJ NOI MATH-7832 最接近的分数
- matlab 不常见但实用的命令和方法
- http_build_query用法,挺方便的
- 处理大数据量栅格数据的经验