AsyncTask异步更新UI界面以及原理

来源:互联网 发布:网络域名 编辑:程序博客网 时间:2024/06/12 00:35

【摘录】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类就可以了。
0 0
原创粉丝点击