Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10459
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 86
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 13:55
文章分类

全部博文(8)

文章存档

2015年(1)

2014年(7)

我的朋友
最近访客

分类: Android平台

2014-04-09 10:59:38

    Android中操作UI必须在主线程中进行,有两种方式可以实现异步处理刷新UI,一种是Handler,另外一种就是AsyncTask。
    Handler多使用在处理多个线程与主线程交互时,AsyncTask则主要用在只需要处理一个线程时使用。AsyncTask主要有一下几个方法,
1.onPreExecute();任务执行之前由UI线程调用,准备工作。
2.doInBackground(Params...);后台任务执行,由于运行在非UI线程,在该方法中不可以调用UI,否则会出现异常。在该方法中可以使用publishProgress()来通知进度。
3.onPostExecute(Result);任务运行结束由UI线程调用。
4.onCancelled();在运行中可以调用该方法结束调用
5.publishProgress();进度更新,一般在doInBackground中调用,通知UI进度更新。
6.onProgressUpdate();在调用publishProgress()后,该方法会被调用,它运行在UI线程可以刷新进度条之类。

AsyncTask有三个模板参数,
Params:传递给后台任务的参数类型。
Progress:进度单位的类型。
Result:后台执行返回的结果类型。

需要注意的是每个AsyncTask只可以运行一次,即使在运行中被cancel也不可以重新运行。从Android源码中看,AsyncTask是封住了线程池和一个Handler来实现的。
阅读(233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~