HandlerThread线程管理

来源:互联网 发布:政务数据共享交换平台 编辑:程序博客网 时间:2024/04/29 06:24

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