HandlerThread

安卓的消息机制Handler相信大家都不陌生,很多异步任务都推荐大家使用Handler来发消息来进行线程间的通信。有需要的同学可以参阅Handler机制——Handler,Message,MessagQueue,Looper。Handler是绑定在looper上的,官方推出了一个天然就带looper的线程类HanlerThread来更加方便我们使用Handler。

/**
* Handy class for starting a new thread that has a looper. The looper can then be 
* used to create handler classes. Note that start() must still be called.
*/

类注释就是说这个是带looper的thread。

    public HandlerThread(String name) {
       super(name);
       mPriority = Process.THREAD_PRIORITY_DEFAULT;
   }
   
   /**
    * Constructs a HandlerThread.
    * @param name
    * @param priority The priority to run the thread at. The value supplied must be from 
    * {@link android.os.Process} and not from java.lang.Thread.
    */
   public HandlerThread(String name, int priority) {
       super(name);
       mPriority = priority;
   }

构造方法也相对比较简单,就是来初始化线程的优先级。
重点在run方法里边。

/**
     * Call back method that can be explicitly overridden if needed to execute some
     * setup before Looper loops.
     */
    protected void onLooperPrepared() {
    }

    @Override
    public void run() {
        mTid = Process.myTid();
        首先对mTid进行赋值。
        Looper.prepare();
        就是在这个线程中创建一个looper实例。可以参阅相关内容。
        synchronized (this) {
            mLooper = Looper.myLooper();
            拿到刚才创建的looper实例。
            notifyAll();
        }
        Process.setThreadPriority(mPriority);
        设置线程优先级
        onLooperPrepared();
        回调方法,不重写就没有用。
        Looper.loop();
        开启looper的循环,开始接收消息。
        mTid = -1;
    }

在我们调用start之后,run会自动执行,之后我们可以绑定handler到这个线程创建的looper上边。后边就可以快乐的使用handler来发送和处理消息了。处理任务的线程就会在这个子线程里边。

你可能感兴趣的:(HandlerThread)