作为Android开发者都知道在子线程中使用Handler必须要创建Looper,其实HandlerThread就是在线程中封装了Looper的创建和循环,不用我们开发者自己去创建它,下面我们来看看源码

源码
public class HandlerThread extends Thread {    int mPriority;    int mTid = -1;    Looper mLooper;    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;    }        /**     * 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();        Looper.prepare();        synchronized (this) {            mLooper = Looper.myLooper();            notifyAll();        }        Process.setThreadPriority(mPriority);        onLooperPrepared();        Looper.loop();        mTid = -1;    }

可以看出它就是一个普通的线程,创建的时候设置优先级,我们来看看它的run方法,挑重点看

 //创建looper,保存到ThreadLocal线程中 Looper.prepare(); synchronized (this) {      //得到创建的Looper      mLooper = Looper.myLooper();      notifyAll();  }  Process.setThreadPriority(mPriority);  onLooperPrepared();  //启动循环Looper中的消息队列  Looper.loop();

很简单,就是创建了Looper并且启动循环消息队列。

public Looper getLooper() {     if (!isAlive()) {          return null;     }            // If the thread has been started, wait until the looper has been created.    synchronized (this) {         while (isAlive() && mLooper == null) {            try {                wait();             } catch (InterruptedException e) {            }          }     }        return mLooper; }

得到刚才创建的Looper对象。

public boolean quit() {      Looper looper = getLooper();      if (looper != null) {          looper.quit();          return true;      }        return false; }

释放Looper消息队列里的消息。

到此HandlerThread的源码就解析完了。

更多相关文章

  1. Android之智能问答机器人
  2. Android(安卓)开机自启动应用
  3. 【OkHttp3源代码分析】(一)Request的execute
  4. Android中使用Timer配合postInvalidate()刷新View
  5. android Handler消息处理源码剖析
  6. Android:ThreadLearning1
  7. Android-SurfaceView示例
  8. Handler的理解
  9. 线程池工具类

随机推荐

  1. ANDROID2.3改进
  2. Android(安卓)遍历Hashmap里面的key 和va
  3. Android检查网络是否可用及上网请求
  4. Android相机启动crash错误排查
  5. 【Android(安卓)MyEclipse】no projects
  6. Android(安卓)ActionBar使用
  7. android review--基础知识
  8. 如何让自己写的apk获得系统权限
  9. 常见android中的style
  10. Android实现高斯模糊(也叫毛玻璃效果)