本文主要是介绍一起Talk Android吧(第一百七十五回:Android中的Handler机制四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
各位看官们大家好,上一回中咱们说的是Android中Handler机制的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,我们在上一回中分析了Handler类的源代码,本章回中将分析Looper类的源代码。它的实现在frameworks/base/core/java/android/os/Looper.java
文件中。
我们先看看它的成员变量,主要的有两个:一个是用来存放消息队列,另外一个用来存放当前的线程,它们在构造函数中被初始化,详细的源代码如下:
private Looper(boolean quitAllowed) {mQueue = new MessageQueue(quitAllowed); //消息队列在这里创建mThread = Thread.currentThread();}
接下来我们重点看一下常用的方法,首先是prepare
方法,它主要用来做Looper的初始化工作,主要内容就是构造一个Looper对象并且和线程关联起来,其源代码如下:
public static void prepare() {prepare(true);}private static void prepare(boolean quitAllowed) {if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}sThreadLocal.set(new Looper(quitAllowed));}
接着我们分析myLooper方法,它主是返回当前线程中的Looper对象
public static @Nullable Looper myLooper() {return sThreadLocal.get();}
最核心的方法出场了,它就是loop方法。它主要功能就是运行消息循环,看完源代码后就会发现本质上是遍历队列,下面是它的源代码,我们忽略了许多非核心操作:
public static void loop() {final Looper me = myLooper(); //获取当前线程中的Looperfinal MessageQueue queue = me.mQueue; //获取Looper中的消息队列for (;;) { //启动消息循环Message msg = queue.next(); //遍历消息队列中的每条消息msg.target.dispatchMessage(msg); //通过dispatchMessage方法回调Handler中的handleMessage方法处理消息}}
最后介绍的是quit方法,它用来退出当前Looper运行的消息循环,下面是它的源代码:
public void quit() {mQueue.quit(false);}
各位看官,关于Android中Handler机制的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
这篇关于一起Talk Android吧(第一百七十五回:Android中的Handler机制四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!