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. EasyUI中使用Uploadity问题

    <div id="UploadPage" class="easyui-layout" fit="true"> <div r ...

  2. Android(通用机能)

    数据存储 本地数据存在都是私有化的. 共享方法1是构造数据源组件.方法2将数据放入扩展存储设备. Mashup 服务组件默认没有运行在独立进程或线程中,因此费时操作一般需要起线程.可配置指定新进程. ...

  3. 如何快速恢复MyEclipse的默认主题

    这里天在研究主题,到网上找了一些主题导入,可是有一部分主题导入后不能通过preference选项进行恢复默认主题!那怎么办?有没有别的办法! 在网上找了一些答案,有更改工作空间的办法,也有替换.set ...

  4. Dom对象和jQuery包装集

    Dom对象 在传统的JavaScript开发中,我们经常都是首先获取Dom对象,比如: document.getElementById("dv1"); 我们经常使用getEleme ...

  5. OpenGL ES 2.0 顶点着色器的妙用

    1.飘扬的旗帜(水面起伏) 基本原理 绘制一帧画面时由顶点着色器根据一定的规则变换各个顶点的位置,即可得到旗帜迎风飘扬的效果. 为了使旗帜的飘动过程比较平滑,采用基于正弦曲线的顶点位置变换规则.

  6. Dijkstra算法 最短路径 (部分)

    void Dijkstra(int n, int v, int *dist, int *prev, int c[maxnum][maxnum]) {     bool s[maxnum];       ...

  7. [Leetcode][015] 3Sum (Java)

    题目在这里: https://leetcode.com/problems/3sum/ [标签] Array; Two Pointers [个人分析] 老实交待,这个题卡半天,第一次做不会,抄别人的.过 ...

  8. input 不支持HTML5的placeholder属性

    解决方法如下: <input type="text" value="搜索乐高资讯" onfocus="if(this.value=='搜索乐高资 ...

  9. java并发编程_建立概念

    在学习多线程编程时,相信大家会遇到好多概念类的东西,对于这些概念的不准确理解会导致后面越学越糊涂,现将学习过程中遇到的概念整理到这篇博客上,一来记录学习点滴,二来也加深理解,如果有理解不准确的地方,希 ...

  10. Kafka笔记--参数说明及Demo

    参考资料:http://blog.csdn.net/honglei915/article/details/37563647参数说明:http://ju.outofmemory.cn/entry/119 ...