协程是什么:

协程是方便线程的调度,可以化异步为同步,避免回调地狱,是kotlin的强大功能之一
1.构建于线程之上,官方称之为轻量型线程
2.每个携程包含特定代码块,协程可以进行调度执行,执行过程可以暂停,恢复。(挂起恢复函数)

Java中异步任务的实现
继承Thread类
重写Runnable接口

AsyncTask实现

//AsyncTask属于抽象类,使用时需要实现子类
//Params:开始异步任务执行时传入的参数类型,对应excute()中传递的参数
//Progress:异步任务执行过程中,返回下载进度值的类型
//Result:异步任务执行完成后,返回的结果类型,与doInBackground()的返回值类型保持一致
//使用时并不是所有类型都被使用
//如果无被使用,可用java.lang.Void类型代替
//若有不同的业务,需额外再写1个AsyncTask的子类
public abstract class AsyncTask{

}
图片来源:https://www.jianshu.com/p/ee1342fcf5e7
image.png
调用顺序
image.png
调用代码:
/*
AsyncTask的实现类
*/
class MyTask : AsyncTask() {
_/
执行线程任务前的操作
根据具体需求复写(可选)
*/
_override
fun onPreExecute() {
super**.onPreExecute()
}

  1. _/**<br /> * 接收输入参数,执行任务中的耗时操作,返回 线程任务执行的结果<br /> * 定义线程任务(必须)<br /> */<br /> _**override fun **doInBackground(**vararg **p0: String?): String? {<br /> _//自定义的线程任务<br /> //可调用publishProgress()显示进度,之后将自动执行onProgressUpdate()<br /> _publishProgress()<br /> }<br /> _/**<br /> * 在主线程 显示线程任务执行的进度<br /> * 根据需求复写(可选)<br /> */<br /> _**override fun **onProgressUpdate(**vararg **values: Int?) {<br /> _//在主线程 显示线程任务进度的方法<br /> _**super**.onProgressUpdate(*values)<br /> }<br /> _/**<br /> * 接收线程任务执行结果,将执行结果显示到UI组件<br /> * 必须复写,从而自定义UI操作<br /> */<br /> _**override fun **onPostExecute(result: String) {<br /> **super**.onPostExecute(result)<br /> _//UI操作<br /> _}
  2. _/**<br /> * 将异步任务设置为取消状态<br /> * (可选)<br /> */<br /> _override **fun **onCancelled() {<br /> _//取消逻辑<br /> _**super**.onCancelled()<br /> }<br />}

fun main() {
/*
创建AsyncTask子类的实例
其子类必须在UI线程中创建
/
var mTask = MyTask()
_/*
手动调用exectute(…, … , …)
从而执行异步线程任务
必须在UI线程中调用
同一个AsyncTask的子类实例对象只能执行一次,执行第二次会抛出异常
执行时,系统会自动调用AsyncTask的如onPreExecute,doInBackground等一系列方法
不用手动调用上述方法
/
_mTask.execute()
}