Android程序有UI进程和后台进程,在执行一些耗时的操作时,如果在UI进程中,很可能出现假死的情况,用户体验会受到影响,因此,那些耗时进程往往就放在了后台进程中,用户体验能更好一些。网络情况不稳定,在向服务器请求数据时,也许要用到后台进程(Android4.0以后强制不能再主线程中访问网络),也可能用到AsyncTask,后面会介绍AsyncTask与Handler的区别,进行一下对比。

AsyncTask是一个抽象类(abstract class)是一个后台任务类,异步执行。

public abstract class AsyncTask<Params, Progress, Result>

AsyncTask继承自Object,在后台运行,结果在UI进程上发布。

异步任务被定义为三个泛型:

Params:启动任务执行的输入参数,如url

Progress:后台任务执行的百分比

Result:后台执行任务的最终结果

执行的四个步骤:

onPreExecute():在doInBackground方法前执行,可以显示对话框显示进度(ProgressDialog)。

doInBackground(Params…):后台执行耗时、网络访问任务,过程中可以调用publicPregress(Progress… values)更新任务进度。

onProgressUpdate(Progress…):主线程执行,显示任务执行的进度,可以增加进度条增加用户体验度。

onPostExecute(Result):UI处理方法,在doInBackground中得到的返回值将作为该方法的参数。

onCancelles():用户调用取消时要做的操作,在cancel()和doInBackground()后执行

异步加载数据至少重写:doInBackground()和onPostExecute()

注意:task在UI进程中创建,并在UI进程中使用execute()方法调用启动,task只可以被执行一次,否则抛出异常。

可以调用cancel(boolean)尝试取消任务执行。

其中的内部类Status标志当前任务状态:FINISHED(结束),PENDING(还没有开始),RUNING(正在执行),可以调用getStatus()查看当前任务状态。

AsyncTask与Handler的对比:

AsyncTask:过程可控,简单快捷;不适用多个异步操作和UI改变

Handler:结构清晰,功能定义明确,多个任务后台执行时简单清晰;只有一个后台任务时闲的过于复杂。

Handle:涉及到Handler,Looper,Message,Thread四个对象。实现异步的流程是主线程启动Thread子线程,子线程运行生成Message-Looper。获取Message并传递给Handler,Handler逐个获取Looper中的Message,并进行UI变更。

Android AsyncTask学习的更多相关文章

  1. Android开发学习路线的七个阶段和步骤

    Android开发学习路线的七个阶段和步骤           Android学习参考路线     第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...

  2. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  3. Android开发学习路线图

    Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...

  4. Android动画学习(二)——Tween Animation

    前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...

  5. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  6. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  7. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  8. Android Animation学习(六) View Animation介绍

    Android Animation学习(六) View Animation介绍 View Animation View animation系统可以用来执行View上的Tween animation和F ...

  9. Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition

    Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition Property animation系统还提供了对ViewGroup中的View改变 ...

随机推荐

  1. 重新认识Intent

    相信android开发工程师,对Intent一定不陌生,在整个开发中随时都用到了,今天我们总结一下Intent. 1. 为什么需要Intent? 在android Intent机制是协助应用间的交互与 ...

  2. Apache Tomcat 7.0 Manager APP

    解决Tomcat 7.0 进入项目管理页面时的密码问题 根据红框中的提示得知缺少manager管理角色,所以我们到Tomcat的conf文件夹下找到tomcat-users.xml文件,添加管理角色, ...

  3. js函数知识点

    1.即使写成functon a()也是可以调用外面定义的变量的,写(a,b),我估计是为了降低耦合性 2.即使写成function a()也是可以用arguments[a]来默认写了(a,b) 3.在 ...

  4. poj3282

    定义一个有4x+1组成的无限集合x>0&x∈Z 素数   x 不能有x = y*z,y,z都是素数 合数 x 有x = y*z y|z中某个数是素数 simi数,只能由两个素数构成. 打 ...

  5. POJ 1064 Cable master(二分查找+精度)(神坑题)

    POJ 1064 Cable master 一开始把 int C(double x) 里面写成了  int C(int x) ,莫名奇妙竟然过了样例,交了以后直接就wa. 后来发现又把二分查找的判断条 ...

  6. [置顶] chinayaosir近10年来所阅读的世界著名IT书籍-图文并茂

    1.人生观(包括做人原则,心理学,投资,销售) 一个人从来到世上,很多东西都是空白, 阅读一些正能量的书籍,把里面的理论用于生活,不断的应用它, 这些观念就会如同软件一样,不断的升级你的大脑, 合理的 ...

  7. 网狐6603 cocos2dx 棋牌、捕鱼、休闲类游戏《李逵捕鱼》手机端完整源码分析及分享

    该资源说明: cocos2d 棋牌.捕鱼.休闲类游戏<李逵捕鱼>手机端完整源码,网狐6603配套手机版源码,可以选桌子,适合新手学习参考,小编已亲测试,绝对完整可编译手机端,下载后将文件考 ...

  8. PHP扩展开发(4) - 多类扩展

    由于函数和单类的扩展,网上一搜一大片,这里就不再叙述了. 这里特别感谢laruence(鸟哥)开源的yaf扩展,解决困扰我多时的多类问题,还在看他的代码学习中,这里是对多类写法学习的一个阶段总结.   ...

  9. [UVALive] 6492 Welcome Party(最小点覆盖)

    6492 Welcome Party For many summers, the Agile Crystal Mining company ran an internship program for ...

  10. Altium designer快捷键

    1. 先设置参数,开启高亮显示,见下图红圈处: (1)选择使能可以高亮:CTRL+鼠标左键点击相应PCB网络即可高亮 (2)选择仅切换键时高亮显示,可以在CTRL+鼠标左键点击相应PCB网络高亮后,移 ...