[0]首先让我们看看官网上是怎么解释AsyncTask的:
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.
An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread. An asynchronous task is defined by 3 generic types, calledParams
,Progress
andResult
,
and 4 steps, calledonPreExecute
,doInBackground
,onProgressUpdate
andonPostExecute
.
简单的来说AsyncTask就是一个简单的用来避免UI阻塞的,运行在background的工具线程类。我们不需要人工来处理这个线程的生命周期,而是按照一定的规则来执行的。
这个Task有3个参数,分别是传入的参数(Params),执行过程中产生的参数(Process),与最后任务结束返回的结果(Result)。如果有不需要的参数,可以用Void来替代。
有4个步骤,分别是:
onPreExecute():用来处理任务执行前需要做的初始化
doInBackground():真正开始在后台执行操作的步骤(这个是必须override的步骤),在这个步骤中可以使用publishProgress(progress……)来提供用于与UI交互显示信息
onProgressUpdate():用来执行过程中即时显示处理进度的函数(获取到doInBackground里面传递过来的参数而进行显示)
onPostExecute();任务执行结束后做的事情
[1]下面是一个简单的AsyncTask范例:
要让一个Task开始执行,只需要像下面这样:
[2]那么如何取消一个AsyncTask呢?
A task can be cancelled at any time by invokingcancel(boolean)
.
Invoking this method will cause subsequent calls toisCancelled()
to return true. After invoking this method,onCancelled(Object)
,
instead ofonPostExecute(Object)
will be invoked afterdoInBackground(Object[])
returns.
To ensure that a task is cancelled as quickly as possible, you should always check the return value ofisCancelled()
periodically
fromdoInBackground(Object[])
, if possible (inside a loop for instance.)
我们可以在任何时候call
cancel(boolean)的方法来取消一个Task,如果呼叫到这个方法会导致之后呼叫isCancelled()
返回true.那么如果这样的话,之后会用onCancelled(Object)
来替代onPostExecute(Object)的执行。
为了确保这个Task能够尽快被取消,我们需要在doInBackground(Object[])执行的时候去checkisCancelled()
[3]使用Thread需要注意的事项:
[4]下面两个行为是安全的,因为AsyncTask的所有callback function都是synchronized.
AsyncTask guarantees that all callback calls are synchronized in such a way that the following operations are safe without explicit synchronizations.
写的不好,请多指教,谢谢!
分享到:
相关推荐
Android AsyncTask异步处理下载网页
Android AsyncTask的简单Demo,对应Blog文章:http://blog.csdn.net/dolacmeng/article/details/50215519
Android 使用AsyncTask异步更新UI界面
android 任务后台处理事物 asyncTask封装
Android AsyncTask用法和异步加载图片通过AsyncTask 从网络上异步加载一张图片
Android_AsyncTask 关于AsyncTask 的一些常见应用。
在Android中使用AsyncTask和Handler线程间交互的方式,详情参见博客:http://www.cnblogs.com/plokmju/p/android_AsyncTask.html和http://www.cnblogs.com/plokmju/p/android_Handler.html
AsyncTask的用法
Android Handler AsyncTask 异步加载
android中AsyncTask和jni技术简单应用--附案例附代码
Android异步处理二:使用AsyncTask异步更新UI界面。
android:AsyncTask实现异步处理任务.pdf
详解Android中AsyncTask的使用。
主要介绍了Android中异步类AsyncTask用法,分析总结了Async Task类的功能、特点及相关的使用技巧与注意事项,需要的朋友可以参考下
基于Android的AsyncTask异步任务, Android的AsyncTask将复杂的数据处理交由子线程, 将处理过程交由主线程处理
Android开发之AsyncTask机制及使用细节例子源码 详见博客 http://www.cnblogs.com/samy/p/4217263.html
NULL 博文链接:https://aking86.iteye.com/blog/1329089
这是Pro Android学习系列中AsyncTask部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512
Android最全最简单的异步任务AsyncTask使用解析.一步到位彻底理解异步任务。
Android_AsyncTask_详解