Android多线程之AsyncTask

引言

除了Thread本身外,在Android中可以扮演线程角色的还有很多,比如AsyncTask,IntentService,同时HandlerThread是一种特殊的线程。尽管AsyncTask,IntentService以及handlerThread的表现形式都有别于传统的线程,但是它们的本质依然是传统的线程。对于AsyncTask来说,它的底层用到了线程池,对于IntentService和HandlerThread来说,它们的底层则直接用到了线程。AsyncTask封装好了线程池和handler,它主要是为了方便开发者在子线程中更新UI。

核心方法

AsyncTask是一个抽象的泛型类,提供了四个核心方法,它们的含义如下所示:

※onPreExecute(),在主线程中执行,在异步任务执行之前,此方法会被调用,一般用于做一些准备工作。

※doInBackGround(Params… params),在线程池中执行,此方法用于执行异步任务,params参数表示异步任务的传输参数。在此方法中可以通过publishProgress方法来更新任务的进度,PublishProgress方法会调用onProgressUpdate方法。另外此方法需要将结果返回给onPostExecute方法。

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

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

条件限制

❤AsyncTask的类必须在主线程中加载,这意味着第一次访问AsyncTask必须发生在主线程

❤AsyncTask的对象必须在主线程中创建

❤execute方法必须在UI线程调用

❤不要在程序中直接调用AsyncTask的onPreExecute(),doInBackGround,onProgressUpdate,onPostExecute方法

❤一个AsyncTask对象只能执行一次,即只能调用一次onexecute方法

使用异步任务的规则:

1,声明一个类继承AsyncTask   标注三个参数的类型

2,第一个参数表示要执行的任务通常是网络的路径;第二个参数表示进度的刻度;第三个参数表示任务执行的返回结果

 

点赞