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改变 ...
随机推荐
- J2EE学习记录,EJB,JNDI,RMI
Java EE 是java平台企业版(Java Platform Enterprise Edition)缩写,是Sum公司为企业级应用推出的标准平台. 随着Java技术的发展,J2EE平台得到了迅速的 ...
- iOS中的UIWindow
UIWindow的作用 UIWindow主要有两个作用: 1 作为UIView视图的最顶层容器,包含所有要显示的UIView 2 传递触摸,非触摸,键盘事件,其中传递非触摸和键盘事件时,UIWindo ...
- [算法]分治算法(Divide and Conquer)
转载请注明:http://www.cnblogs.com/StartoverX/p/4575744.html 分治算法 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式.字面上的解释是 ...
- 创建C#DLL
1. 创建classlibrary 2.编写一个COM接口和一个COM类 [Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")] public ...
- C程序设计语言练习题1-5
练习1-5 修改温度转换程序,要求以逆序(即按照从300度到0度的顺序)打印温度转换表. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() ...
- Java学习笔记--对象克隆
转自:Edward_qing_Lee 的专栏 http://blog.csdn.net/edward_qing_lee/article/details/8249102 一.java 方法参数 理解: ...
- Histogram Equalization
转载请注明出处. Histogram Equalization 也就是直方图均衡化, 是一种常用的通过直方图处理来增强图像的方法. 对于一副灰度图像,其像素范围一般在0~255之间,我们记nk(0&l ...
- 『安全科普』HTTP协议讲解及手工模拟发送
学习,熟悉HTTP协议,便于以后进行HTTP重放攻击! 0x 01 HTTP协议 查看HTTP协议 先查看鼠标点击一个链接后,浏览器发出了怎样的HTTP请求. Chrome浏览器下,按F12进入开发者 ...
- 【转】 ubuntu12.04更新源 官网和163等
原文网址:http://blog.csdn.net/zhangliang_571/article/details/8813999 分类: LINUX 摘要: 本文列出ubuntu 12.04 LTS更 ...
- event.keyCode列表
Keycode对照表 字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 ...