Android-源码分析之HandlerThread
上一篇我们介绍了Handler 我们知道了一般的工作线程在默认情况下是没有消息处理能力的,如果要处理消息需要通过如下的代码来给普通的线程创建一个Looper。
class NonMainThread extends Thread { |
这个看上去不是很复杂,但是Android为我们提供了更为简单的实现方式–HandlerThread
首先我们还是先来看下它的使用方式:
mHandlerThread = new HandlerThread("WorkThread"); |
我们接下来就来分析下这个过程:
首先在构造方法中接受一个参数为这个HandlerThread的名字,接着为我们的线程设置一个默认的优先级。
public HandlerThread(String name) { |
如果不想使用默认的优先级可以使用下面的构造方法:
public HandlerThread(String name, int priority) { |
紧接着在调用start方法后,run方法将会运行:
@Override |
这段代码很熟悉吧,其实该博客开头提到的那个代码,这里需要注意的是onLooperPrepared()这个方法是空的,我们如果需要在Looper循环开始前做些其他处理可以覆写这个方法。
接下来我们就可以调用getLooper方法返回已经处于loop状态的Looper了,也有了MessageQueue,就可以创建Handler处理其他线程发过来的消息了,注意的是这里是为了让非UI线程拥有处理其他线程发送过来消息能力才使用HandlerThread的,如果只需要具有消息发送的能力就不需要了,这个一定要清楚。
public Looper getLooper() { |