天天看点

android——AsyncTask

AsyncTask是一个轻量级的异步任务类,它可以从线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程更新UI。它封装了Thread和Handler,通过它可以更方便的执行后台任务以及在主线程中更新UI。  注:并不太适合特别耗时的任务,太耗时用线程池。

public abstract class AsyncTask<Params,Progress,Result>

AsyncTask是一个抽象的泛型类,它提供了Params(参数类型),Progress(后台任务的执行进度的类型)和Result(后台任务返回结果的类型)这三个泛型参数,如果AsyncTask不需要传递具体的参数,那么这三个泛型的参数用Void来代替。

AsyncTask提供了4个核心方法,他们的含义如下:

(1)onPreExecute(),在主线程中执行,在异步任务执行前,此方法会被调用,一般用于一些准备工作,列如初始化进度条;

(2)doInBackground(Params...Params),在线程池中执行,此方法用于执行异步任务,params参数表示异步任务输入参数。在此方法中可以通过publicProgress方法来更新任务的进度,publicProgress方法会调用onProgressUpdate方法。另外此方法需要返回计算结果给onPostExecute方法;

(3)onProgressUpdate(Progress...values),在主线程中执行,当后台任务执行进度发生改变时,此方法会被调用;

(4)onPostExecute(Result  result),在主线程中执行,在异步任务执行之后,此方法会被调用,其中result参数是后台任务的返回值,即doInBackground()的返回值。

AsyncTask在使用中的限制条件:

(1)AsyncTask必须在主线程中加载;

(2)AsyncTask的对象必须在主线程中创建;

(3)execute方法必须在UI线程中调用;

(4)不要在程序中直接调用onPreExecute(),onPostExecute(),doInBackground(),onProgressUpdate()方法;

(5)一个AsyncTask对象只能执行一次,即只能调用一次execute方法,否则会报运行时异常;