HandlerThread 学习笔记

1.Handler

Handler会关联一个单独的线程和消息队列。Handler默认关联主线程,虽然要提供Runnable参数 ,但默认是直接调用Runnable中的run()方法。也就是默认下会在主线程执行,如果在这里面的操作会有阻塞,界面也会卡住。如果要在其他线程执行,可以使用HandlerThread

注:handler只能在带有looper的线程中创建,一般的线程是不带looper的,想要让线程具有looper,需调用Looper.prepare()创建,所以handler不能在子线程中创建。

2.HandlerThread

HandlerThread继承于Thread,所以它本质就是个Thread。与普通Thread的差别就在于,它有个Looper成员变量。这个Looper其实就是对消息队列以及队列处理逻辑的封装,简单说就是 消息队列+消息循环。

当我们需要一个工作者线程,而不是把它当作一次性消耗品,用过即废弃的话,就可以使用它

public class WorkThreadHandler {
	
	private static final String TAG = "WorkThreadHandler";

	private HandlerThread mWorkThread;
	private Handler mWorkHandler;

	public WorkThreadHandler(int priority) {
		mWorkThread = new HandlerThread(TAG, priority);//创建一个HandlerThread,参数priority必须来自于android.os.Process
		mWorkThread.start();//启动工作线程
		mWorkHandler = new Handler(mWorkThread.getLooper());//创建工作线程的handler
	}

	public boolean isRelease() {
		if (mWorkThread == null || mWorkHandler == null) {
			return true;
		}

		return false;
	}

	public void release() {
		if (mWorkThread != null) {
			mWorkHandler.removeCallbacksAndMessages(null);

			Looper looper = mWorkThread.getLooper();
			if (looper != null) {
				looper.quit();
			}
		}

		mWorkThread = null;
		mWorkHandler = null;
	}

	public void postTask(Runnable task) {
		if (mWorkHandler != null) {
			mWorkHandler.post(task);//通过handler post任务,让工作线程执行我们的task,上层可通过mWorkThreadHandler.postTask方式使用本类
		}
	}

	public void postTaskDelayed(Runnable task, long delay) {
		if (mWorkHandler != null) {
			mWorkHandler.postDelayed(task, delay);
		}
	}

	public void postTaskAtTime(Runnable task, long when) {
		if (mWorkHandler != null) {
			mWorkHandler.postAtTime(task, when);
		}
	}

	public void postTaskAtFront(Runnable task) {
		if (mWorkHandler != null) {
			mWorkHandler.postAtFrontOfQueue(task);
		}
	}

	public void removeTask(Runnable task) {
		if (mWorkHandler != null) {
			mWorkHandler.removeCallbacks(task);
		}
	}

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值