Android AsyncTask学习
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学习的更多相关文章
- Android开发学习路线的七个阶段和步骤
Android开发学习路线的七个阶段和步骤 Android学习参考路线 第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习路线图
Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...
- Android动画学习(二)——Tween Animation
前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...
- Android自动化学习笔记:编写MonkeyRunner脚本的几种方式
---------------------------------------------------------------------------------------------------- ...
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
---------------------------------------------------------------------------------------------------- ...
- android开发学习笔记000
使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
- Android Animation学习(六) View Animation介绍
Android Animation学习(六) View Animation介绍 View Animation View animation系统可以用来执行View上的Tween animation和F ...
- Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition
Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition Property animation系统还提供了对ViewGroup中的View改变 ...
随机推荐
- RAC RMAN备份
这篇主要介绍的是RAC 环境下的RMAN 备份. 关于Oracle 备份与恢复的一些理论知识参考我的Blog: Oracle 备份 与 恢复 概述 http://blog.csdn.net ...
- bestcoder r44 p3 hdu 5270 ZYB loves Xor II
这是昨晚队友跟我说的题,不知道当时是什么玄幻的事件发生了,,我看成了两两相乘的XOR 纠结了好长时间间 不知道该怎么办 今天早上看了下这道题,发现是两两相加的XOR 然后就想了想昨晚的思路 发现可做 ...
- CSS3 @font-face (webfont)
先大概介绍下计算机领域常见的字体类型与格式. 点阵字体(Bitmap Font)点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示.这种文字显示方式于较早前的电脑系统(例如未有图形接口时的 D ...
- ecstore生成二维码
利用phpqrcode库生成二维码: /* *二维码添加 */ ////////////////////////////////////// /*引入文件*/ @include(APP_DIR.'/i ...
- ./configure 时候报错c++ 编译器不能执行
./configure时报错:configure: error: C++ compiler cannot create executables .哎,今天重装测试服务器上的系统,设置好IP可以远程访问 ...
- 使用接口的方式调用远程服务 ------ 利用动态调用服务,实现.net下类似Dubbo的玩法。
分布式微服务现在成为了很多公司架构首先项,据我了解,很多java公司架构都是 Maven+Dubbo+Zookeeper基础上扩展的. Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按 ...
- Hibernate学习笔记--核心编程
参考资料:Java Web核心框架 http://blog.csdn.net/lsh6688/article/details/7611950 补充:ThreadLocal的使用:http://www. ...
- 蚁群算法matlab实现
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下用matlab实现蚁群算法: %蚂蚁算法test %用产生的一个圆上的十个点来检验蚂蚁 ...
- java实现双向链表
PS:双向链表(每个节点含有指向前一个节点的前驱与后一个节点的后继) public class DoublyLinkedList { static class Node { private Objec ...
- Java Timer 定时器的使用
设置定时任务很简单,用Timer类就搞定了. 一.延时执行首先,我们定义一个类,给它取个名字叫TimeTask,我们的定时任务,就在这个类的main函数里执行. 代码如下:package test;i ...