Android多线程,HandlerThread的使用总结

        时间过的很快,转眼已经到了2020年3月,最近对公司项目进行总结,开发过程中遇到过很多问题,其中在完成这个项目中有使用到handlerthread,个人感觉这是特别棒的一种异步通信机制。

之前对于Android常见的多线程有:1.继承Thread类;2.实现Runnable接口。3.Handler;4.AsynTask;5.HandlerThread;项目中用到HandlerThread感觉特别棒;

目录

Android多线程,HandlerThread的使用总结_第1张图片
分析目录

(一)定义

一个Android已经封装好的轻量级异步类

(二)作用

1.实现多线程:在工作线程中执行任务,如耗时任务

2.异步通信,消息传递:实现工作线程与主线程之间的通信,即:将工作线程执行的结果传递给主线程,从而在主线程中执行相关的UI操作,从而保证线程安全;

(三)优点

方便实现异步通信,即不需使用“任务线程(如继承Thread类)+Handler”的复杂组合;(实际上本质上是通过继承Thread类和封装Handler类的使用,从而使得创建新线程和与其他线程进行通信变得更加方便易用)

(四)工作原理

内部原理=Thread类+Handler类机制,即:

通过继承Thread类,快速地创建1个带有Looper对象的新工作线程;

通过封装Handler类,快速创建Handler与其它线程进行通信;

(五)使用步骤

HandlerThread的本质:继承Thread类与封装Handler类;

HandlerThread的使用步骤分为5步:

Android多线程,HandlerThread的使用总结_第2张图片
使用步骤

(六)实例讲解

1.实例说明:点击按钮实现延迟操作;

2.最终更新UI组件;

3.具体实现:可以下载 :github参考例子

运行结果如下图:

Android多线程,HandlerThread的使用总结_第3张图片
运行结果

特别注意:

细节问题1:In Android, Handler classes should be static or leaks might occur.

即造成严重的内存泄露,关于Handler的内存泄露可以查看文章:Android:关于Handler内存泄露的那些小事_移动开发_专注分享 Android开发 干货-CSDN博客

细节问题2:连续发送消息

当你连续点击3下时,发现并无按照最新点击的按钮操作显示,而是按顺序的一个个显示出来,原因:使用HandlerThread时只是开了一个工作线程,当你点击n下后,只是将n个消息发送到消息队列messagequeue里排队,等候派发消息给Handler再进行对应的操作;

细细品味一下,里面有很多值得学习的地方。

你可能感兴趣的:(Android多线程,HandlerThread的使用总结)