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