android Thread HandlerThread Looper Message MessageQueue Handler的关系
2016-09-06 14:51
666 查看
1,MessageQueue与Message的关系
Message中文是消息,及线程处理的最小单元,里面带有处理的数据集,或还带有操作,及告诉目的地要做什么事情, 每个MessageQueue里包含有Message。每个Message不是直接插入到MessageQueue里的,而是通过MessageQueue.IdleHandler 与looper一起工作,把Message放到MessageQueue里,及addIdleHandler(MessageQueue.IdleHandler handler)
和removeIdleHandler(MessageQueue.IdleHandler handler)
方法,把MessageQueue.IdleHandler压入到MessageQueu里。
2,Thread和HandlerThread的关系
HandlerThread就是带有Looper循环的Thread.
3,Looper介绍
Looper即一个循环,必须绑定到一个固定的线程里,通过getThread()方法可以获得该looper绑定的Thread对象,通过getMainLooper()获得主线程里的looper对象,myLooper()可以获得当前线程里的looper对象,通过myQueue()方法可以获得当前线程里的messageQueue对象。
4,Thread、HandlerThread、和Looper的关系的关系
一般声明一个thread是没有带looper循环的,但是可以通过Looper.prepare()方法给一个线程加上looper;Looper.loop()执行该looper绑定的线程里的messageQueue,直到该loopger结束;Loop.quit()结束该循环,实例代码如下:
Message中文是消息,及线程处理的最小单元,里面带有处理的数据集,或还带有操作,及告诉目的地要做什么事情, 每个MessageQueue里包含有Message。每个Message不是直接插入到MessageQueue里的,而是通过MessageQueue.IdleHandler 与looper一起工作,把Message放到MessageQueue里,及addIdleHandler(MessageQueue.IdleHandler handler)
和removeIdleHandler(MessageQueue.IdleHandler handler)
方法,把MessageQueue.IdleHandler压入到MessageQueu里。
2,Thread和HandlerThread的关系
HandlerThread就是带有Looper循环的Thread.
3,Looper介绍
Looper即一个循环,必须绑定到一个固定的线程里,通过getThread()方法可以获得该looper绑定的Thread对象,通过getMainLooper()获得主线程里的looper对象,myLooper()可以获得当前线程里的looper对象,通过myQueue()方法可以获得当前线程里的messageQueue对象。
4,Thread、HandlerThread、和Looper的关系的关系
一般声明一个thread是没有带looper循环的,但是可以通过Looper.prepare()方法给一个线程加上looper;Looper.loop()执行该looper绑定的线程里的messageQueue,直到该loopger结束;Loop.quit()结束该循环,实例代码如下:
class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper.loop(); } }
幸好android为我们提供了一个直接生成带有looper线程的方法,及实例化一个HandlerThread对象,通过HandlerThread.getLooper()方法即可获得该HandlerThread的looper对象。
5,Handler和Thread HandlerThread Looper Message MessageQueue的关系
Handler类是用来发送和处理消息/Runnable的类,一个Handler类与唯一的一个线程关联,并且该线程是生成该Handler的线程,
它把消息发送到该生成它的线程里的MessageQueue里,然后当Message出队列的时候,就执行该消息。
[code]post(Runnable),
postAtTime(Runnable, long),
postDelayed(Runnable, long),是用来处理runnable对象的;[/code]
[code]sendEmptyMessage(int),
sendMessage(Message),
sendMessageAtTime(Message, long), and
sendMessageDelayed(Message, long)方法是[/code]
用来处理Message对象,一般是立即执行的,但是我们是可以设置时延,还可以循环执行。[/code]
可以通过handleMessage (Message msg) 方法来接收消息。
实例化:Handler(Looper looper)
相关文章推荐
- UIStackView before iOS 9.0
- POJ 2778 DNA Sequence(AC自动机+矩阵加速)
- 关于UIImageView显示图片的不同样式
- 《iOS开发笔记—UIAlertController》
- UIImage图片处理,旋转、截取、平铺、缩放等操作
- UILabel的使用全面总结
- iOS上 关于状态栏的相关设置(UIStatusBar)
- Failure starting system services (java.lang.RuntimeException: There must be one required installer)
- 安卓Studio学习笔记---gradle自定义BuildConfig.DEBUG实现在调试输出Log,正式的时候不输出Log
- error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0'
- 分享个Duilib中基于wke的浏览器控件
- UIImageView有关的帧动画
- UE4蓝图编辑器使用小技巧
- String 、 StringBuilder 、 StringBuffer 的区别
- UE4的BehaviorTrees的特点
- 模拟mui框架编码
- 数据管理平台DMP细致研究——BlueKai
- Ehcache(2.9.x) - API Developer Guide, Cache Loaders
- UE4之Behavior Tree介绍
- 如何使用UE_LOG