HandlerThread简介
Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.
从官方对HandlerThread的解释我们可以知道:
- 一个方便的类,用于启动一个新线程并且它关联上了Looper。
- 工作线程所关联的Looper常常被用于创建Hander。
为什么会有HandlerThread?
在开发中可能有这样的需求,某个线程需要按顺序执行接收到的任务,比如说最常见的就是在UI线程中处理刷新界面的任务。
要注意的是,UI线程创建Looper和开启消息循环这个逻辑Android系统已经为我们搞定了。我们只需要在UI线程创建Handler并通过它发送消息,就可以实现上面所讲的需求。
如果要实现上面的需求就需要自己写以下代码:
public class HandlerThreadDemo1 extends Thread {
@Override
public void run() {
Looper.prepare();
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.e("HandlerThreadDemo1", "threadName--" + Thread.currentThread().getName() + " messageWhat-" + msg.what);
}
};
SystemClock.sleep(3000);
handler.sendEmptyMessage(88);
Looper.loop();
}
}
官方为了方便使用此功能就提供了HandlerThread。
注意:写在Looper.loop()之后的代码不会被执行,因为loop方法中有无限循环的逻辑。可以通过Looper中quit和quitSafely方法终止死循环。
HandlerThread应用场景
- AsyncQueryHandler中使用HandlerThread
- 每隔一定的时间向服务器获取最新数据
另外
不错地对HandlerThread讲解:
Android HandlerThread 完全解析
网友评论