安卓AsyncTask的简单理解

在Android中我们通常使用两种方法实现多线程之间的通信。一个是Thread+Handler,另一个就是我今天要讲的AsyncTask。
大家可以想象一下Thread+Handler一个经典的使用场景:在子线程中进行耗时操作,当任务完成后通过Handler向主线程发送
Message,进而当主线程的Handler收到这条Message后进行UI的更新。这个场景需要分别在Thread和Handler中编写代码逻辑,
为了让代码统一,我们可以使用AsyncTask


AsyncTask它是Android提供的一个助手类,它对Thread和Handler进行了封装,更加方便我们使用,Android之所以提供这个
类,就是为了方便我们在子线程中执行操作,然后将结果发送给主线程 进行UI的更新等操作。当我们使用AsyncTask时,就不需
要去关注Thread和Handler。我们只需要关注业务逻辑即可。


AsyncTask有四个回调方法 分别是:onPreExecute,doInBackground,onProgressUpdate和onPostExecute。这四个方法的参
数和返回值都基于泛型,在使用中我们遇到了三种泛型参数:
Params 表示用于AsyncTask执行任务的参数的类型
Progress 表示在子线程处理过程中可以发布结果的数据类型
Result表示任务全部完成后所返回的数据类型

接下来我们具体说一下AsyncTask的四个回调方法的作用后-

1.onPreExecute();
这个方法有MainThread注解,表示这个方法是运行在主线程中的。在AsyncTask执行了execute()方法后就会在UI
线程上执行onPreExecute()方法,这个方法在任务真正执行前运行,我们通常可以在该方法中显示一个进度条,从而告知用户
后台任务即将开始。
2.doInBackground();
该方法有WorkerThread注解,表示该方法是运行在字线程中的,不是主线程。doInBackground会在
onPreExecute()方法执行完成后立即执行,我们可以在这个方法中处理业务逻辑。由于运行在子线程中所以不会阻塞UI线程
3.onProgressUpdate();
这个方法也有MainThread注解,说明是在主线程上被调用。如果在doInBackground中多次调用publishProgress方法
那么主线程就会多次回调onProgressUpdate方法。
4.onPostExecute();
这个方法也有MainThread注解,表示该方法是在主线程中调用的。当doInBackground方法执行完毕之后B偶,就表示
任务完成了,doInBackground方法的返回值就会作为参数在主线程中传入到onPostExecute()方法中,这样就
可以在主线程中根据任务的执行结果更新UI。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页