Handler消息传递处理机制
2016-07-11 21:44
435 查看
Handler消息传递处理机制
简介:
出于性能优化的考虑,Android的UI操作并不是线程安全的,这以为这如果有多个线程并发操作UI组件的时候,就可能出现线程安全的问题。为了解决这个问题,Android制订了一条简单的规则,这条规则就是,只允许UI线程修改Activity中的UI组件。Android在程序第一次启动的时候,就会同时启动一条主线程(Main Thread,主线程也经常被成为UI线程),主线程主要负责处理与UI有关的事件,并把相关的时间分发到对应的组件进行处理。
当需要让新启动的线程周期性的改变界面组件的属性值的时候就需要借助Handler的消息处理机制来实现了。
Handler类的主要作用:
– 在新启动的线程中发送消息– 在主线程中获取、处理消息
Handler、Loop、MessageQueue
介绍:MessageQueue:消息队列,存放消息的地方,按照FIFO规则执行,每一个线程只可以拥有一个MessageQueue。在创建Looper对象会创建一个MessageQueue对象。
Message:消息对象,MessageQueue中存放的对象。一个MessageQueue中可以包含多个Message对象。可以通过Message.obtain()或者Handler.obtainMessage()获取Message对象。但是这并不一定是直接创建一个新的实例,而是先从消息池中看有没有可用的Message实例,存在则直接取出返回这个实例。如果消息池中没有可用的Message实例,则才用给定的参数创建一个Message对象。调用removeMessages()时,将Message从MessageQueue中删除,同时放入到消息池中。
Looper:操作MessageQueue。一个Looper对应一个MessageQueue。通过调用Looper.myLooper()可以获得当前线程的Looper对象。Looper从MessageQueue中取出Message然后,交由Handler的handleMessage()进行处理。处理完成后,调用Message.recycle()将其放入消息池中。
Handler:消息的处理者。handler负责将需要传递的信息封装成 Message对象,然后调用sendMessage()方法将消息放入MessageQueue中。当MessageQueue循环到该Message,调用相应的handler对象的handleMessage()方法对其进行处理。Handler都可以共享同一Looper和MessageQueue。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories