标签存档: AsyncTask

在android如何使用AsyncTask异步任务

最近项目中用到异步任务功能,网上搜罗了下资料,奈何国内的质量实在太低,依靠伟大的谷歌搜到很多国外的文章,写的非常的好,更好的在于没有copy paste的成分.

本文内容转自:http://www.brighthub.com/mobile/google-android/articles/82805.aspx

英语好的朋友请直接阅读原文.小弟不才,做个苦力当翻译

介绍

我们的Android应用越来越复杂,连接服务端,和web交互数据,存储大文件在android数据库中的同时显示进度条或者在通知栏显示通知. 我们如何能在抛开UI线程的情况下,边接受处理数据边用进度条展示呢?开始之前,必须知道什么是"UI线程"?

如果你熟悉"Thread"的概念. 那么你应该很容易明白异步任务. Android应用在处理的时候只有一个main主线程在运行.这个看上去像在任何地方只有一个任务. 如果你只有一个UI线程在工作,你就不能做一些复杂的事情,比如同时存储10000条记录,这个时候应用会停住,直到1000条记录存储完毕. 这不是一个好的方式. 在android你可以在一个应用里,同一时间运行多个线程. 举例:一个后台任务可以从服务端接受数据并且存储到本地数据库中.

如何对"Thread"概念有足够的了解,那么我们继续

现在我们可以开始了吗? 开始在后台执行任务? 这里我们还有几步工作要做.

一个古老的路线方法是使用Thread线程类,使用HandlersRunnables. 但是我们有更好的方式。使用AsyncTask

AsyncTask 类

让我来看看AsyncTask类的结构

这个方法在后台任务完成后执行,传入一个参数Z,也是前面定义的那个,你可以使用这个参数做一些结束任务时的处理,比如跳转intent或者其他的事情.

X,Y,Z的是什么类型?

我想你也可以从上面的结构中得出结论:

X – 运行后台任务的时候,需要传入的参数类型. 可以是一个对象的集合.

Y – 当你需要使用onProgressUpdate方法时,传入的参数类型

Z – 当后台任务完成时,需要传入数据处理的数据类型

如何使用这个异步任务呢?执行要执行下面2行代码.

这里的输入参数是前面讲的X类型

一旦我们运行异步任务.你可以使用getStatus()方法获取它的状态

我们可以接受下面几个状态:

RUNNING – 任务处理中

PENDING – 任务还没有完成.

FINISHED – 任务结束.

提醒

需要注意的是:

  • 不用主动去调用onPreExecute, doInBackground and onPostExecute这个三个方法.这些方法会自动执行.

  • 你不能在另外一个AsyncTask或者线程中使用异步任务. 调用异步任务必须在UI主线程中使用.

  • onPostExecute 这个方法时在UI主线程中执行.这里你可以调用另外一个异步任务.

  • 输入参数可以设置一个Object集合,这样你就可以传入任意类型的对象

更多内容: http://www.brighthub.com/mobile/google-android/articles/82805.aspx#ixzz1GkXV8IT4