描述:
消息机制可以说是4个类的关系,分别是
- Handler
- Looper
- MessageQueue
- Message
其中流程是这样子的,开启一个消息循环,每循环一次,便从消息队列中取出一个消息,然后交给相应的Handler
来处理。
而消息循环的具体实现就是一个Looper
,Looper
内部持有了一个消息队列,
我们要用Looper
的prepare()
方法在当前线程中创建唯一的Looper
对象,其中,Looper
内部持有一个消息
队列,并
在ActivityThread的main()函数中,即启动UI线程,便是开启一个消息循环。
在UI线程中,确保有且仅有一个消息循环,之后,所有的与UI相关的操作,都会通过Hanlder
以发消息的形式先放入MessageQueue
,Looper
通过执行一个循环,不断取出队列的消息Message
, 再将该消息交给对应的Handler
来处理。
有了这个消息机制,其他线程(包括UI线程本身),对应UI有什么操作想法,不再能直接就修改,而是将想法包装成消息,放到消息队列中,再一一处理。 通过这样的机制,才能保证UI的运行正常。试想,若是线程A,B分别要在屏幕同一位置画一个鸡,鸭,若让A,B的请求同时执行,结果就是鸡鸭都画不成了, 可知,对于不同的线程的请求,必须要有个先后。或是说,线程A可能要画3秒钟,再让B画两秒钟,通过消息,就很容易让这些任务同步。可能,这两个例子有点狭隘了。
源码跟踪
1 | main(){ |