android 多线程学习1:一些基础
android 多线程学习2:线程的创建与方法分析
android 多线程学习3:synchronized与volatile与线程安全对象
android 多线程学习4:线程池ThreadPoolExecutor
android 多线程学习5:AsyncTask
android 多线程学习6:HandlerThread
android 多线程学习7:Handler消息处理机制
HandlerThread使用
//创建UI线程Handler
final Handler mainHandler = new Handler();
//创建HandlerThread实例
HandlerThread handlerThread = new HandlerThread("HandlerThread1");
//启动线程
handlerThread.start();
//创建工作线程Handler,关联HandlerThread的Looper对象,实现与其他线程进行通信
Handler workHandler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 888:
//子线程异步处理耗时操作(如查找文件)
File file = findFile();
//发送结果给主线程
Message resultMessage = new Message();
resultMessage.what = 999;
resultMessage.obj = file;
mainHandler.sendMessage(resultMessage);
break;
default:
break;
}
}
};
//发送指令给工作线程
workHandler.sendEmptyMessage(888);
private static class MyHandler extends Handler {
private final WeakReference<TestActivity> mActivty;
public MyHandler(TestActivity activity) {
mActivty = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mActivty.get() != null) {
if (msg.what == 999) {
//主线程更新UI操作
mActivty.get().refreshView(msg.obj);
}
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//退出消息循环
handlerThread.quit();
//清空消息队列
workHandler.removeCallbacksAndMessages(null);
}
HandlerThread分析
- HandlerThread 继承于Thread,所以本质上它就是一个线程;
-
HandlerThread 内部集成了Looper实现,构建了Handler消息机制,可以让我们在自己的线程中分发和处理消息。
HandlerThread中的Looper实现 - 单线程按照sendMessage的先后顺序执行多个任务;
HandlerThread使用场景
HandlerThread比较适用于单线程+异步队列的场景,比如IO读写操作,耗时不多而且也不会产生较大的阻塞。对于网络IO操作,HandlerThread并不适合,因为它只有一个线程,还得排队一个一个等着。
(部分内容参考于网络,如有不妥,请联系删除~)
网友评论