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);
            }
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值