android中的消息机制,一般是通过三个概念来理解的:MessageQueue(消息队列),Handler,Looper。我们知道在安卓中通过子线程是不能更新UI的,如果想在子线程中更新界面的话,只能向主线程中发送消息通知主线程更新界面,而消息机制就是在这个背景下产生的。
在Handler源码中我们可以看到,是依赖MessageQueue和Looper两个对象

1.当我们需要使用Handler的时候首先要调用Looper.prepare()方法

此时会在sThreadLocal中保存一个当前线程的Looper实例,这个实例在接下来的Handler中会使用到
2.以下是创建Handler的源码

通过以上代码我们可以看到,首先会获取一个Looper对象,然后进入到myLooper()方法中

当使用get()方法的时候会获取到刚刚我们设置的Looper对象。
3.使用创建好的Handler对象发送消息。不管是使用handler.sendMessage或者post等方法,最终会走到以下方法


该方法最终会将消息添加到消息队列中。消息是添加到队列中了,但是我们如何去获取数据呢?
网友评论