使用過程:
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);
}
}
}
}