【摘录】http://blog.92coding.com/index.php/arichives/362.html
概述:
AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类。AsyncTask的内部实现是一个线程池,所有提交的异步任务都会在这个在这个线程池中的工作线程内执行,当工作线程需要跟UI线程交互时,工作线程会通知向在UI线程创建的Handler传递消息的方式,调用相关的回调函数,从而实现UI界面的更新。
AsyncTask抽象出后台线程运行的5个状态:
1.准备运行
2.正在后台运行
3.进度更新
4.完成后台任务
5.取消任务
针对这五个阶段,AsyncTask提供了五个回调函数:
1.准备运行:onPreExecute()。
该回调函数在任务呗执行之后立即由UI线程调用。这个步骤通常用来建立任务,在用户接口(UI)上显示进度条。
2.正在后台运行:doInBackground(Params...)
该回调函数有后台线程在onPreExecute()方法执行结束后立即调用。
通常在这里执行耗时的后台计算。计算的结果必须由该函数返回,
并被传递到onPostExecute()中。在该函数内也可以使用publishProgerss(Progress...)
来发布一个或者多个进度单位(unitsof progress).这些值将会在onProgressUpdate(Progress...)
中被发布到UI线程。
3.进度更新:onProgressUupdate(Progress...)
该函数由UI线程在publishProgerss(Progress...)方法调用完后被调用。一般用于动态地显示一个进度条。
4.完成后台任务:onPostExecute(Result)
当后台计算结束后调用。后台计算的结果会被作为参数传递给这一函数。
5.取消任务:onCancelled()
在调用AsyncTask的cancel()方法时调用。AsyncTask的构造函数有三个模板参数:
1)Params ,传递给后台任务的参数类型
2)Progress,后台计算执行过程,进步单位(progress units)的类型。
3)Result.后来执行返回的结果的类型
AsyncTask并不总是需要上面的全部3种类型。标识不使用的类型很简单,只需要使用Void类就可以了。