HandlerThread

HandlerThread

HandlerThrad继承了Thread,它是一种可以使用Handler的Thread,它的实现也很简单,就是在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()方法来开启消息循环,这样就实际的使用中就允许在HandlerThraead中创建Handler了,以下是HanlderThrad的run方法。

@Override
public void run() {
    mTid = Process.myTid();
    Looper.prepare();
    synchronized (this) {
        mLooper = Looper.myLooper();
        notifyAll();
    }
    Process.setThreadPriority(mPriority);
    onLooperPrepared();
    Looper.loop();
    mTid = -1;
}

从HandlerThread的实现来看,它不同于一般的Thread,普通的Thread主要用于在run方法中执行耗时任务,而HandlerThread在内部创建了消息队列,外界需要通过Handler的消息方式来通知HandlerThread执行一个具体的任务。
  由于HandlerThread的run方法开启了一个无限循环,因此当不需要HandlerThread的时候,可以通过quit或者quitSafely方法来终止线程的执行。
  HandlerThread在Android中一个具体的场景就是IntentService。

示例

HandlerThread handlerThread = new HandlerThread("HandlerThread#1");
handlerThread.start();

Handler hanlder = new Handler(handlerThread.getLooper()) {
    @Override
    public void handleMessage(Message msg) {
        // somm code
    }
};
handler.sendMessage(message);

通过创建HandlerThread并通过start方法运行这个线程,通过获取其内部的looper构造Handler并派生子类创建消息处理的方法,最后通过Handler发送信息。

你可能感兴趣的:(HandlerThread)