参考文献:
Handler机制 https://www.cnblogs.com/steffen/p/11243489.html
AsyncTask机制
https://www.runoob.com/w3cnote/android-tutorial-ansynctask.html
https://www.jianshu.com/p/ee1342fcf5e7
https://www.jianshu.com/p/37502bbbb25a

一、安卓与Java线程开发的不同之处
安卓中只有主线程(aka UI线程)可以更新UI,新创建的子线程是无法对UI进行操作的。

由于第一条所述原因,Android的处理机制为:子线程不直接操作UI,而是由主线程分配要处理的事务,子线程处理完后再把结果反馈给主线程显示到UI上。
这种异步任务机制常用的有两种:Handler与AsyncTask

二、Handler机制
Handler是主线程与子线程的通讯媒介,因为它有两个作用:①添加消息到消息队列;②处理looper分发回来的消息

2.1 相关概念
图片说明

2.2 流程
第一步:异步通信准备(创建UI线程;创建Looper;创建MessageQueue;创建Handler,自动与MessageQueue与Looper绑定)
第二步:消息入队
第三步:消息循环(a.获取消息;b.消息分发)无线循环消息队列,不为空就取出消息分发给Handler
第四步:消息处理

图片说明

三、AsyncTask机制
3.1 Handler的劣势
Handler模式需要为每一个任务创建一个子线程,任务完成后通过Handler实例向UI线程发送消息,完成UI的更新,这种方式对于整个过程的控制比较精细,但缺点是代码相对臃肿,以及在多个任务同时执行时,不易对线程进行精确的控制。
AsyncTask就是为简化操作而生。

3.2 结构
图片说明

3.3 流程
图片说明

图片说明

3.4 注意事项
图片说明

3.5 泛型参数解释

public class MyAsyncTask extends AsyncTask <Params, Progress, Result> { 
 ... 
}

// 整体作用:控制AsyncTask子类执行线程任务时各个阶段的返回类型
// 具体说明:
    // a. Params:开始异步任务执行时传入的参数类型,对应excute()中传递的参数
    // b. Progress:异步任务执行过程中,返回下载进度值的类型
    // c. Result:异步任务执行完成后,返回的结果类型,与doInBackground()的返回值类型保持一致
// 注:
    // a. 使用时并不是所有类型都被使用
    // b. 若无被使用,可用java.lang.Void类型代替
    // c. 若有不同业务,需额外再写1个AsyncTask的子类