在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程(UI 线程),在子线程中操作UI线程会出现错误。因此android提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户。这样就解决了子线程更新UI的问题。但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题。因此android提供了一个工具类AsyncTask,顾名思义异步执行任务。

关于参数:

AsyncTask定义了三种泛型类型 Params,Progress和Result。

  • Params 启动任务执行的输入参数,比如HTTP请求的URL。
  • Progress 后台任务执行的百分比。
  • Result 后台执行任务最终返回的结果,比如String

关于方法:

一般的情况下:使用异步任务需要覆盖以下几个常用的方法:其中doInBackground和onPostExecute是必选。

* onPreExecute(), 该方法将在执行实际的后台操作前被UI 线程调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这个方法可以不用实现。

* doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台处理工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
* onProgressUpdate(Progress...),在publishProgress方法被调用后,UI 线程将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
* onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI 线程调用,后台的计算结果将通过该方法传递到UI 线程,并且在界面上展示给用户.

* onCancelled(),在用户取消线程操作的时候调用。在主线程中调用onCancelled()的时候调用。

关于参数需要注意的是:doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第三个为doInBackground返回和onPostExecute传入的参数。下面通过一个Demo来说明如何使用Android.os.AsyncTask类,通过进度条来显示进行的进度,然后用TextView来显示进度值。

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。优点:简单,快捷,过程可控。

缺点就是在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.

在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成Message-àLooper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变更。优点:结构清晰,功能定义明确,对于多个后台任务时,简单,清晰.缺点:在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)。

更多相关文章

  1. Android:在子线程中更新UI,解析异步消息处理机制(Handler)
  2. 详解Android使用OKHttp3实现下载(断点续传、显示进度)
  3. Android(安卓)绑定类型服务---简介
  4. android如何利用基于Http 协议的WebService服务来获取远程数据库
  5. Android引入外部自定义特殊字体的方法
  6. android开发之Android(安卓)Interface Definition Language(AIDL)
  7. Android解决自定义View获取不到焦点的情况
  8. Android(安卓)Studio——Android(安卓)View 如何绘制
  9. (转)Android中Dialog的“生命周期”

随机推荐

  1. MySql查询不区分大小写解决方案(两种)
  2. 数据库设计三大范式简析
  3. 跨数据库实现数据交流
  4. 防御SQL注入的方法总结
  5. 用户 jb51net 登录失败。原因: 该帐户的
  6. 聚焦 Android(安卓)11: Google Play 应用
  7. Android(安卓)屏幕适配:最全面的解决方案
  8. Android(安卓)内存限制
  9. Android——一个简单的银行系统
  10. Android(安卓)Drawable 分类笔记