AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用。Android之所以提供AsyncTask这个类,就是为了方便我们在后台线程中执行操作,然后将结果发送给主线程,从而在主线程中进行UI更新等操作。在使用AsyncTask时,我们无需关注Thread和Handler,AsyncTask内部会对其进行管理,这样我们就只需要关注于我们的业务逻辑即可。
AsyncTask有三个模板函数:
1、Params:传递给后台任务的参数类型。
2、Progress:后台计算执行过程中,进度的单位类型。
3、Result:后台执行返回的结果的类型。
具体写法:
public class DownloadTask extends AsyncTask<Void,Integer,Boolean>{
当不需要传递参数的时候就写成void
AsyncTask需要重写5个方法,分别是:
1、onPreExecute方法:准备运行,该回调函数在任务被执行之后立即由UI线程调用,一般可以显示进度条。它会运行在doInBackground方法之前,相当于初始化。
该方法有MainThread
注解,表示该方法是运行在主线程中的。
2、doInBackground(Params ...)方法:正在后台运行,通常在这里执行耗时的后台计算,计算结果返回给函数,这里如果AsyncTask的第三个参数是Void的话不需要返回,这里不能更新UI,但是可以调用publishProgress(Progress ...)方法完成。
该方法有WorkerThread
注解,表示该方法是运行在单独的工作线程中的,而不是运行在主线程中。doInBackground会在onPreExecute()方法执行完成后立即执行
3、onProgressUpdate(Progress ...)方法:进度更新,UI线程在publishProgress(Progress ...)方法调用完成后被调用,一般动态显示一个进度。
该方法也具有MainThread
注解,表示该方法是在主线程上被调用的
4、onPostExecute(Result)方法:
该方法也具有MainThread
注解,表示该方法是在主线程中被调用的。当doInBackgroud方法执行完毕后,就表示任务完成了,doInBackgroud方法的返回值就会作为参数在主线程中传入到onPostExecute方法中,这样就可以在主线程中根据任务的执行结果更新UI。
5、onCancelled方法:取消任务,在调用AsyncTask的cancel()方法的时候调用。
调用方法:
new DownloadTask().execute();
如果
Params不为void则在方法中传入对应的参数