文档章节

Android第三十八天

黄晓磊
 黄晓磊
发布于 2016/07/21 08:07
字数 745
阅读 36
收藏 0

1、定义

        异步任务类,在类中实现异步操作,并提供回调方法反馈当前异步执行的程度,最后反馈 的结果提供给UI主线程。

        <1>Android线程

                (1)MainThread主线程(也称UI线程):应用启动时创建,处理与UI相关事情,如点击事件、数据更新;

                (2)WorkerThread子线程:Android4.0之后UI线程不能访问网络资源或执行耗时操作,必须开启子线程;

        <2>主、子线程必须遵循的两条规则:

                (1)Do    not    block    the    UI    thread.(主线程不能被阻塞) 

                (2)Do    not    access    the    Android    UI    toolkit    from    outside    the    UI    thread.(非主线程不能更新UI)

        <3>回调方法

                (1)必须实现的方法

                                doInBackground(Params...params)后台执行的任务;在子线程中调用的方法,要做耗时操作就在这个方法中执行;

                                doPostExecute(Result result)任务完成,UI线程执行;在主线程中执行,在doInBackground之后调用,doInBackground返回的结果就到了这个方法中;

                (2)其他实现方法

                                onPreExecute()后台任务开始之前的准备工作,UI线程执行;在主线程中执行,在doInBackground之前,在这个方法中一般做耗时操作之前的准备工作;

                                onProgressUpdate(Progress... values) 当前执行的进度,UI主线程执行;在主线程中运行,用来发布进度值;作用:一般用于更新UI中的ProgressBar进度条;用法:必须在doInBackground的方法体中调用 publishProgress(Progress... values)方法

                                onCancelled() 取消任务,任务正在执行的情况;在主线程中执行。取消下载任务,doInBackground()方法就不会再继续执行;在启动异步任务的类中调用取消异步任务的方法 XXX.cancel(true);

        <4>AsyncTask的一般用法:

                (1)创建类,继承AsyncTask,并指定三个泛型

 
  1. public class ImgAsy extends AsyncTask<String, Integer, Bitmap>

                                第一个泛型:Params,执行下载任务的地址类型,一般是请求的URL或String;决定了doInBackground()方法的参数类型;

                                第二个泛型:Progress,显示进度值得类型,常用类型是Integer;决定了onProgressUpdate()方法的参数类型;

                                第三个泛型:Result,下载线程执行完成后返回的结果,常用Bitmap;决定了doInBackground()方法的返回值类型,决定了onPostExecute的参数类型

                (2)重写两个必要的方法

                (3)重写可选的方法

                (4)在UI线程中,实例化AsyncTask对象,并将UI控件作为构造参数传入;

                (5)在UI线程中,执行AsyncTask对象的execute(...)方法,开始执行异步任务;

                (6)异步开始执行后,执行AsyncTask对象的cancel(true)方法,停止异步任务;

        <5>使用AsyncTask必须遵守的准则:

                (1)三个泛型的使用位置;

                (2)Task的实例必须在UI  thread中创建;

                (3)execute方法必须在UI  thread中调用;

                (4)该Task只能被执行一次,否则多次调用时将会出现异常

 

© 著作权归作者所有

共有 人打赏支持
黄晓磊
粉丝 20
博文 51
码字总数 45039
作品 0
成都
私信 提问
Android第二十八天

一:Servlet (服务器小程序) 实现Servlet的类必须继承HttpServlet类,还要复写doGet(xxx), doPost(xxx)。(或者复写doService(xxx),但不常用。) Servlet的生命周期: 加载 初始化 服务 卸载 ...

黄晓磊
2016/07/07
21
0
如何让你的手机比别人最先升级到 Android L

八月初,Google发布了Android的分配数据,显示KitKat占到了目前在用Android市场份额的21%。这是一个重要的里程碑,但这条路依旧漫长和沉闷,因为软件更新依旧需要依靠设备制造商和运营商。同...

oschina
2014/08/23
4.5K
13
Firefox OS 身先去:移动生态为何难有第三极?

日前,Mozilla宣布将停止开发及销售Firefox OS系统的智能手机,尽管该公司宣称Firefox OS未来不会消失,但就像之前退出的另外一款智能手机操作系统WebOS被部分应用到LG的智能电视上一样,仅是...

oschina
2015/12/12
2.3K
18
Android市场占有率坐四望三,逼近Windows Mobile

至去年第四季为止,Symbian仍是本地最大的智慧型手机平台,iPhone已抢下第二名,Android占比已与Windows Mobile相近,若市占持续增加,可望挤身第三大平台。 在国内手机与行动电信业者支持下...

老枪
2010/04/16
706
2
AndroidBookworm,android Reading ecstasy(安卓书虫,安卓...

AndroidBookworm,android Reading ecstasy(安卓书虫,安卓读书人狂喜) AndroidBookworm 是一款基于C#,给合安卓技术的软件,致力于将电脑平台上的电子书移动(用户自己制作自己的android电子书...

AndroidBookworm
2011/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

esxi 更换ssl证书

概述 就是想换一个证书而已,你可以通过下面的途径去申请一个泛解析域名的证书之后再esxi上安装上 使用阿里云域名api申请Let’s Encrypt泛域名免费ssl证书 申请完成证书之后进行下一步 操作 ...

bboysoulcn
15分钟前
0
0
PLC编程入门:梯形图

梯形图(LAD)是PLC编程的最佳可视化语言,它看起来非常类似于继电器电路图,因此如果 你对继电器控制和电子电路有所了解的话,那么学起来会非常容易! 在这个教程中,我们将学习关于使用梯形...

汇智网教程
17分钟前
0
0
Kubernetes 1.13.0的快速升级

Kubernetes 1.13.0已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.13.0版本暂时不支...

openthings
31分钟前
2
0
go的卸载和环境变量配个人.bashrc

若是用安装包直接解压 http://download.csdn.net/detail/u010026901/7592581 cd /usr/local tar -zxvf go1.1.2.linux-386.tar.gz(先把安装包移到这个目录) 3.安装 $ cd go/src,$ ./all.b......

dragon_tech
36分钟前
1
0
区块链安全 - 以太坊短地址攻击

1 基础知识 EVM虚拟机在解析合约的字节码时,依赖的是ABI的定义,从而去识别各个字段位于字节码的什么地方。关于ABI,可以阅读这个文档: https://github.com/ethereum/wiki/wiki/Ethereum-C...

HiBlock
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部