AsyncTask是一个抽象类,使用时需要继承这个类,定义一个它的派生类并重写相关方法,然后调用execute()方法。要注意,在继承时需要设定三个泛型Params、Progress和Re-sult的类型,如AsyncTask<Void,Inetger,Void>。
AsyncTask类的声明如下。
public abstract class AsyncTask<Params,Progress,Result>
可以看到,AsyncTask是一个泛型类,它的三个类型参数的含义如下。
Params:是指调用execute()方法时传入的参数类型和doInBackground()的参数类型。
Progress:是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型。
Result:后台任务的返回结果类型,是指doInBackground()的返回值类型。
AsyncTask类主要为我们提供了如下方法。
onPreExecute():此方法会在后台任务执行前被调用,用于进行一些准备工作。
doInBackground(Params...params):此方法中定义要执行的后台任务,在这个方法
中可以调用publishProgress来更新任务进度(publishProgress内部会调用onProgressUp- date方法)。(www.xing528.com)
onProgressUpdate(Progress...values):由publishProgress内部调用,表示任务进度更新。
onPostExecute(Resultresult):后台任务执行完毕后,此方法会被调用,参数即为后台任务的返回结果。
onCancelled():此方法会在后台任务被取消时被调用。
需要注意的是,在以上方法中,除了doInBackground方法由AsyncTask内部线程池执行外,其余方法均在主线程中执行。
为了正确使用AsyncTask类,必须遵守以下几条准则。
(1)AsyncTask的实例必须在UI线程中创建。
(2)execute方法必须在UI线程中调用。
(3)不要手动调用onPreExecute()、onPostExecute(Result)、doInBackground(Params...)、onProgressUpdate(Progress...)这几个方法,需要在UI线程中实例化这个task来调用。
(4)该实例只能被执行一次,否则多次调用时将会出现异常。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。