Android技术知识

Android中的Looper,Message,MessageQ

2016-04-21  本文已影响65人  追风骚年

这是简书的第一篇文章,希望自己慢慢更新。

Looper(循环者

Looper 这个类最主要的属性感觉就是有一个MessageQueue,后面会讲到这个类

Looper

使用Looper对象都是先prepare,然后loop的

prepare

prepare的时候可以让当前线程拥有一个Looper对象,一个线程也只能有一个Looper否则就会抛出异常。

ThreadLocal

ThreadLocal

看注释,是当前线程的一个副本,暂且这么理解吧

loop

程序一旦执行loop(),首先获得刚才的Looper对象,然后开始一个for循环,for循环不断从MessageQueue中取出Message,然后把msg交给msg的target去处理,很显然这个targer就是传说总的Handler。

MessageQueue

然后再去Message中看看

Message

Message中有个target 我就放心了,handler会处理发过来的消息,

dispatchMessage

如果Message中如果有callback优先处理callback,否则会通过Handle的handleMessage去处理

handleMessage

handleMessage默认是空实现,一般我们写handle的时候会重写handleMessage方法。


文章写到这里好像就结束了,但是还有两个问题。

1.为什么我们可以直接new Handler(),Handler必须是生存在Looper线程中的,那是因为我们的UI线程就是一个Looper线程,所有消息会发送到UI线程的MessageQuene中,然后UI的Looper会取出消息让我们的handler 去处理发送过来的消息。

2.接着上个问题,为什么handleMessage可以更新UI呢?那是因为Handler会允许在它所在的Looper线程中,而这里的Looper线程正是主线程,所以UI就可以更新了

上一篇下一篇

猜你喜欢

热点阅读