Android中AsyncTask使用
一、AsyncTask的定义:
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程,并在主线程更新UI。
从实现上来说,AsyncTask封装了Thread和Handler,通过AsyncTask可以很方便执行后台任务以及在主线程中访问UI。
AsyncTask是一个抽象的泛型类,它提供了Params、Progress和Result这三个泛型参数
public abstract class AsyncTask<Params,Progress,Result>
AsyncTask三个泛型参数:
》Params,任务的输入参数类型;
》Progress,任务执行进度的参数类型。
》Result,任务返回结果的参数类型。
如果AsyncTask确实不需要传递具体的参数,那么这三个泛型参数可以用Void来代替。
二、AsyncTask的4个核心方法:
1、onPreExecute()
在任务开始后立即调用,在UI线程执行。这一步通常用于设置任务,例如在用户界面中初始化进度条。
2、doInBackground(Params...)
在后台线程池中执行,可能会花费很长时间;可以通过publishProgress方法来更行任务的进度,publishProgress方法会调用onProgressUpdate方法;此方法还需要返回结果给onPostExecute方法。
3、onProgressUpdate(Progress...)
在UI线程上执行。这种方法是用来显示用户进度界面,后台进程仍在执行。例如,它可用于显示一个进度条或在文本中显示日志。
4、onPostExecute(Result)
在UI线程上执行。后台进程的结果被传递到这一步作为参数。
常用的写法如下:
class MyTask extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... params) { //执行异步任务 int n = 10; //调用publishProgress公布进度,最后onProgressUpdate方法将被执行 publishProgress(n); Thread.sleep(500); return null; } @Override protected void onPostExecute(String result) { //更新UI,显示结果 } @Override protected void onProgressUpdate(Integer... values) { //更新进度信息 }
任务调用的代码:
new MyTask().execute();//执行任务
三、AsyncTask的规则:
1、AsyncTask实例必须在UI线程中创建。
2、execute(Params... params)方法必须在UI线程中调用。
3、不要手动调用onPreExecute,doInBackground,onProgressUpdate,onPostExecute这些方法
4、一个AsyncTask实例只能执行一次(只能调用一次execute方法),如果执行第二次将会抛出异常