HandleThread

HandleThread集成Thread,它是一種可以使用handle的Thread,它在run方法中通過Looper.prepare()來創建一個消息隊列,並通過Looper.loop(),來開啓消息循環。

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

HandleThread與普通Thread的不同之處,普通Thread是在run方法中執行耗時操作,而HandleThread創建了消息隊列,外界可以通過Handle的消息方式執行一個具體的任務。HandleThread的run方法是一個無限循環,當不需要使用時,可以通過quit或者quitSafely來終止程序的執行。

HandleThread的使用場景以及好處:

1.在需要重複使用子線程處理任務時,可以使用HandlerThread,它自帶Looper使他可以通過消息來多次重複使用當前線程,節省開支,如果在開發中多次使用類似new Thread(){…}.start(),這種方式開啓一個子線程,會創建多個匿名線程,使得程序運行變慢。

2.在非UI線程使用消息機制,可以使用HandlerThread,它不會干擾或阻塞UI線程(android系統提供的Handler類內部的Looper默認綁定的是UI線程的消息隊列)

HandleThread的具體應用場景體現在IntentService中,可以參照我的下一篇文章IntentService,這裏簡單的寫一個使用的例子,基本可以安照UI線程的Handle的使用方法使用:

public class HandleThreadActivity extends Activity {
    private static final String Tag = "HandleThreadActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        HandlerThread mHandlerThread = new HandlerThread("test");
        mHandlerThread.start();
        Looper mLooper = mHandlerThread.getLooper();
        Handler mHandler = new Handler(mLooper) {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                int value = msg.what;
                Log.i(Tag, "value====" + value);
            }
        };

        mHandler.sendEmptyMessage(2);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章