HandlerThread線程管理

使用過程:
1。新建一個HandlerThread對象:

MyHandlerThread mHandlerThread = new MyHandlerThread("TestTrafficHandlerThread");

2。 使用post方法將Runnable對象加入這個線程的隊列

 mHandlerThread.post(mStatsTrafficTestRunnable);

3。注意Runnable對象並不是一個線程,而是用於安排在特定線程運行的工作單元,用mHandlerThread.post方法,可指定這個這個Runnable對象的運行線程

4。 mHandlerThread.post加入的所有Runnable對象都工作在線程名爲TestTrafficHandlerThread的線程中

5。 一個Thread對應一個looper,一個looper對應一個消息/Runnable隊列,一個Thread可定義多個handler

6。一個典型的HandlerThread的定義如下:

public class MyHandlerThread extends HandlerThread{

    private Handler mHandler;
    private List<Runnable> mRunnables = new ArrayList<Runnable>();
    private static Object sLock = new Object();

    public TrafficStatsHandlerThread(String name) {
        super(name);
    }

    @Override
    protected void onLooperPrepared() {
        synchronized (sLock) {
            mHandler = new Handler();

            if (!mRunnables.isEmpty()) {
                for (Runnable r : mRunnables) {
                    mHandler.post(r);
                }

                mRunnables.clear();
            }
        }
    }

    public void post(Runnable task) {
    //當looper還沒有準備好時,post方法被調用了,那就先用list緩存好等待執行的方法
        synchronized (sLock) {
            if (mHandler == null) {
                mRunnables.add(task);
            } else {
                mHandler.post(task);
            }
        }
    }

}
發佈了74 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章