1. 定义
- AsyncTask是一个抽象类,查询源码可以得到,其中只有一个抽象方法
doInBackground()
,所以继承AsyncTask需要实现该方法。
public abstract class AsyncTask<Params, Progress, Result> {
protected abstract Result doInBackground(Params... var1);
}
通过Android Studio
查看源码,可以发现其提示非常明显:(此处感慨一下,Android studio
确实十分好用)
上面只截图了一部分的源码,从图中可以看出,其中必须实现的抽象方法
doInBackground()
前面标识着WorkerThread
,表示该方法是运行在工作线程中;而其他的一些方法前面标识着MainThread
,则表示运行在UI线程中,也就意味着这些方法能够控制UI (敲重点!要考的!)
- 我们再来看看
AsyncTask
类
public abstract class AsyncTask<Params, Progress, Result> {
}
可以看到,AsyncTask
有三个参数:
Params
:表示启动任务时需要的参数类型Progress
:表示任务运行过程中返回进度值的类型Result
:表示后台执行任务完成后返回结果的类型
暂时对这三个参数有这么一个了解即可,下面会结合实例代码进行解释。
- 优点
封装,简化异步操作:
封装了使用Thread + Handler进行ui的更新、数据的传递操作等等。
2.重点方法介绍
先来一张方法调用顺序图:
execute
在源码中,可以看到execute
的重载方法:
public final AsyncTask<Params, Progress, Result> execute(Params... params) {
throw new RuntimeException("Stub!");
}
public static void execute(Runnable runnable