时间过的很快,转眼已经到了2020年3月,最近对公司项目进行总结,开发过程中遇到过很多问题,其中在完成这个项目中有使用到handlerthread,个人感觉这是特别棒的一种异步通信机制。
之前对于Android常见的多线程有:1.继承Thread类;2.实现Runnable接口。3.Handler;4.AsynTask;5.HandlerThread;项目中用到HandlerThread感觉特别棒;
目录
![](https://img.haomeiwen.com/i5615806/1b081361ea5c8185.png)
(一)定义
一个Android已经封装好的轻量级异步类
(二)作用
1.实现多线程:在工作线程中执行任务,如耗时任务
2.异步通信,消息传递:实现工作线程与主线程之间的通信,即:将工作线程执行的结果传递给主线程,从而在主线程中执行相关的UI操作,从而保证线程安全;
(三)优点
方便实现异步通信,即不需使用“任务线程(如继承Thread类)+Handler”的复杂组合;(实际上本质上是通过继承Thread类和封装Handler类的使用,从而使得创建新线程和与其他线程进行通信变得更加方便易用)
(四)工作原理
内部原理=Thread类+Handler类机制,即:
通过继承Thread类,快速地创建1个带有Looper对象的新工作线程;
通过封装Handler类,快速创建Handler与其它线程进行通信;
(五)使用步骤
HandlerThread的本质:继承Thread类与封装Handler类;
HandlerThread的使用步骤分为5步:
![](https://img.haomeiwen.com/i5615806/dce7dba804a6c2b3.png)
(六)实例讲解
1.实例说明:点击按钮实现延迟操作;
2.最终更新UI组件;
3.具体实现:可以下载 :github参考例子
运行结果如下图:
![](https://img.haomeiwen.com/i5615806/a0831f6f499e2208.png)
特别注意:
细节问题1:In Android, Handler classes should be static or leaks might occur.
即造成严重的内存泄露,关于Handler的内存泄露可以查看文章:Android:关于Handler内存泄露的那些小事_移动开发_专注分享 Android开发 干货-CSDN博客
细节问题2:连续发送消息
当你连续点击3下时,发现并无按照最新点击的按钮操作显示,而是按顺序的一个个显示出来,原因:使用HandlerThread时只是开了一个工作线程,当你点击n下后,只是将n个消息发送到消息队列messagequeue里排队,等候派发消息给Handler再进行对应的操作;
细细品味一下,里面有很多值得学习的地方。
网友评论