在Android异步消息笔记中,简单介绍了异步消息处理机制。不过Android还提供了另外一些好用工具,如AsyncTask。借助AsyncTask,即使对异步消息处理机制不熟悉,也可以容易的从子线程切换到主线程。AsyncTask也是基于异步消息处理机制,只是封装好了而已。
基本用法:
AsyncTask是一个抽象类,需要创建一个子类去继承它,并重写相应的一些方法。
● 一个简单的定义如下( 需指定3个泛型参数 ):
class ExampleTask extends AsyncTask<ParamsType, ProgressType, ResultType>{ 类的实体 }
参数1:ParamsType,执行AsyncTask时需要传入的参数,可用于后台任务中使用
参数2:ProgressType,后台任务执行时,如需在界面显示进度,此参数作为进度单位的数据类型,如Integer
参数3:ResultType,后台任务执行完后,如需返回结果,此参数作为返回值的数据类型
● 一般重写的方法如下:
①on PreExecute(): 后台任务开始执行前调用,用于进行一些界面上的初始化操作,比如一个进度对话框
②ResultType doInBackground( Params...): 这个方法的所有代码在子线程中执行,所以不能做UI操作。一般在这处理耗时任务,任务完成可以return返回结果。如果ResultType就是AsyncTask<ParamsType, ProgressType, ResultType>的第三个参数是void就不能return
③ onProgressUpdate(ProgressType progress): 当后台任务调用了 publishProgress(progress)时,onProgressUpdate(ProgressType progress)就很快被调用。这个方法,可以进行UI操作,利用参数中数值即可更新相应的界面
④ onPostExecute(ResultType result) : 后台任务执行完并通过return返回值时(两个条件同时需要),这个方法很快会被调用,return返回的数据作为ResultType result参数传入此方法中,可以利用这些数据做一些UI操作。
● 如果要启动这个任务:new ExampleTask().execute(); 即可
AsyncTask的好处就是,doInBackground()执行一些耗时任务,onProgressUpdate()进行UI操作,onPostExecute(ResultType result)执行收尾工作。