首页 理论教育 深入了解AsyncTask抽象类的使用

深入了解AsyncTask抽象类的使用

时间:2023-06-27 理论教育 版权反馈
【摘要】:AsyncTask是一个抽象类,使用时需要继承这个类,定义一个它的派生类并重写相关方法,然后调用execute()方法。要注意,在继承时需要设定三个泛型Params、Progress和Re-sult的类型,如AsyncTask<Void,Inetger,Void>。AsyncTask类的声明如下。AsyncTask类主要为我们提供了如下方法。需要注意的是,在以上方法中,除了doInBackground方法由AsyncTask内部线程池执行外,其余方法均在主线程中执行。为了正确使用AsyncTask类,必须遵守以下几条准则。AsyncTask的实例必须在UI线程中创建。

深入了解AsyncTask抽象类的使用

AsyncTask是一个抽象类,使用时需要继承这个类,定义一个它的派生类并重写相关方法,然后调用execute()方法。要注意,在继承时需要设定三个泛型Params、Progress和Re-sult的类型,如AsyncTask<Void,Inetger,Void>。

AsyncTask类的声明如下。

public abstract class AsyncTask<Params,Progress,Result>

可以看到,AsyncTask是一个泛型类,它的三个类型参数的含义如下。

978-7-111-58810-8-Chapter04-55.jpgParams:是指调用execute()方法时传入的参数类型和doInBackground()的参数类型。

978-7-111-58810-8-Chapter04-56.jpgProgress:是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型。

978-7-111-58810-8-Chapter04-57.jpgResult:后台任务的返回结果类型,是指doInBackground()的返回值类型。

AsyncTask类主要为我们提供了如下方法。

978-7-111-58810-8-Chapter04-58.jpgonPreExecute():此方法会在后台任务执行前被调用,用于进行一些准备工作。

978-7-111-58810-8-Chapter04-59.jpgdoInBackground(Params...params):此方法中定义要执行的后台任务,在这个方法

中可以调用publishProgress来更新任务进度(publishProgress内部会调用onProgressUp- date方法)。(www.xing528.com)

978-7-111-58810-8-Chapter04-60.jpgonProgressUpdate(Progress...values):由publishProgress内部调用,表示任务进度更新。

978-7-111-58810-8-Chapter04-61.jpgonPostExecute(Resultresult):后台任务执行完毕后,此方法会被调用,参数即为后台任务的返回结果。

978-7-111-58810-8-Chapter04-62.jpgonCancelled():此方法会在后台任务被取消时被调用。

需要注意的是,在以上方法中,除了doInBackground方法由AsyncTask内部线程池执行外,其余方法均在主线程中执行。

为了正确使用AsyncTask类,必须遵守以下几条准则

(1)AsyncTask的实例必须在UI线程中创建。

(2)execute方法必须在UI线程中调用。

(3)不要手动调用onPreExecute()、onPostExecute(Result)、doInBackground(Params...)、onProgressUpdate(Progress...)这几个方法,需要在UI线程中实例化这个task来调用。

(4)该实例只能被执行一次,否则多次调用时将会出现异常。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈