AsyncTask官方学习
异步任务学习
这两天使用到特别多的AsyncTask
类,一块来学习一下吧
AsyncTask
允许更方便和简单使用UI线程,这个类允许你在UI线程中进行后台操作和展示结果,而无需操作Thread
或者handlers
AsyncTask
是围绕Thread
和Handler
设计的辅助类,并不构成通用线程框架。AsyncTask
最适合的场景是短时间操作(最好几秒钟),如果你需要保持长时间的运行,建议你使用java.util.concurrent
包提供的API,比如Executor
,ThreadPoolExecutor
和FutureTask
一个异步任务是由三个泛型参数(Params,Progress,result
)和四个步骤(onPreExecute,doInBackgroud,onProgressUpdate,onPostExecute
)组成
最简单的使用时必须重写(doInBackgroud(Params...)
)和最常重写(onPostExecute
)方法,比如如下例子
private class DownloadFilesTask extends AsyncTask<URL,Integer,Long>{
protected Long doInBackground(URL... urls){
int count = urls.length;
long totalSize = 0;
for(int i = 0; i< count;i++){
totalSize += Downloader.downloadFile(urls[i]);
publicProgress((i/(float)count)*100));
//如果cancel调用的话提前退出
if(isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress){
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result){
showDialog("Downloaded"+result+" bytes");
}
}
调用也非常简单
new DownloadFilesTask().execute(url1,url2,url3);
AsyncTask的三个泛型参数
Params
代表衣服任务的执行参数,需要传到doInBackground里面的参数
Progress
后台任务执行的进度单位,可以放在进度条中
Result
任务执行完成返回的结果。在onPostExecute的参数就是
三个参数不是必须要有的,也可以
private class MyTask extends AsyncTask<Void,Void,Void>{...}
AsyncTask的四个步骤
onPreExecute()
在任务执行前被UI线程调用。通常被用来进行任务的一些设置,比如在用户界面显示一个进度条
doInBackground(Params...)
在onPreExecute()结束后被后台线程调用,这个步骤被用来放置实际的任务,前面提到的
Params
参数被传递到这里。前面提到的result
参数必须在此步骤中返回,并且传递到最后一步。这里也可以使用publicProgress(Progress...)
通知执行的进度。onProgressUpdate(Progress...)
方法在执行
publishProgress(Progress...)
之后被UI线程调用。这一步可以在用户界面显示任务执行的进度。例如这里通常显示一个进度条或者打印日志字段onPostExecute(Result)
在后台任务完成之后被UI线程调用,后台的结果
result
参数传递到这个方法中
取消任务
可以通过调用cancel(boolean)
方法取消任务,调用之后isCancelled()
会返回True
。在调用此方法之后,onPostExecute(object)
将不再执行,取而代之的是onCancelled(object)
。为了确保任务趋势被取消了,你应该在doInBackground(object[])
始终检查isCancelled()
的值。
一些规则
有一些规则是需要被遵守
AsynacTask
类必须在UI线程中加载- 任务(task)实例必须在UI线程中被创建
- execute()方法必须被UI线程调用
- 不要手动调用
onPreExecute()
、onPostExecute(result)
、doInBackground(Params...)
,onProgressUpdate(Progress...)
- 任务只能被执行一次
具体的参数意义请参见官方文档
AsyncTask官方学习的更多相关文章
- .Net 官方学习文档
.Net 官方学习文档:https://docs.microsoft.com/zh-cn/dotnet/articles/welcome
- 《CWNA官方学习指南(第3版):认证无线网络管理员PW0-105》
<CWNA官方学习指南(第3版):认证无线网络管理员PW0-105> 基本信息 原书名:CWNA: Certified Wireless Network Administrator Off ...
- 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...
- json官方学习档案
项目经常用json开发,但说实话,对json了解的一直不深入.今天看了下json的官方资料,明了很多. json官方网址:http://www.json.org/json-zh.html JSON(J ...
- AsyncTask的学习
具体的用法请看我之前的一篇随笔,用php+mysql+json实现用户反馈. AsyncTask的目标是为你的线程提供管理服务. AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方 ...
- AsyncTask机制学习
其内容可以参考http://blog.csdn.net/webgeek/article/details/17298237 ,首先创建一个AsyncTask类 class GetFaceDetectTa ...
- AsyncTask官方教程-推荐用AsyncTask少用Thread
Using AsyncTask AsyncTask allows you to perform asynchronous work on your user interface. It perform ...
- microsoft 官方学习资源
https://devblogs.microsoft.com/dotnet/ :_NET Blog https://docs.microsoft.com/zh-cn/learn/ :Microsof ...
- JQuery官方学习资料(译):使用JQuery的.index()方法
.index()是一个JQuery对象方法,一般用于搜索JQuery对象上一个给定的元素.该方法有四种不同的函数签名,接下来将讲解这四种函数签名的具体用法. 无参数的.index() < ...
随机推荐
- canvas实现拖动页面时显示窗口视频
简介 当前主流的视频网站目前有不少新鲜好玩的功能,最明显的莫过于小视频的显示--当视频不在当前视口范围 时,会在右下角用一个小窗口来显示当前的视频,而且可以拖拽. 今晚心血来潮,起了动手试试的念头.我 ...
- JavaScrict中的断言调试
今天在看忍者秘籍的时候,看到一个断言方法.查阅了一下资料,原来javascript中的console也包含这个方法.具体用法如下: <script type="text/javascr ...
- 1Z0-053 争议题目解析86
1Z0-053 争议题目解析86 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 86.Your production database is running in archivel ...
- 1Z0-053 争议题目解析510
1Z0-053 争议题目解析510 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 510.You executed the following command in Recover ...
- svn 几个常用命令(持续更新)
1:获取某个版本号(3583)下的代码 svn co http://tech.yoai.com:8300/c ...
- SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...
- java基础面试题
参考:http://blog.csdn.net/jackfrued/article/details/44921941 说未经允许不转载,我只好参考了. 1.面向对象的特征有哪些方面? 抽象:抽象是将一 ...
- [译] MongoDB Java异步驱动快速指南
导读 mongodb-java-driver是mongodb的Java驱动项目. 本文是对MongoDB-java-driver官方文档 MongoDB Async Driver Quick Tour ...
- jQuery-1.9.1源码分析系列(三) Sizzle选择器引擎——总结与性能分析
Sizzle引擎的主体部分已经分析完毕了,今天为这部分划一个句号. a. Sizzle解析流程总结 是时候该做一个总结了.Sizzle解析的流程已经一目了然了. 1.选择器进入Sizzle( sele ...
- jQuery-1.9.1源码分析系列(九) CSS操作
jquery.fn.css获取当前jQuery所匹配的元素中第一个元素的属性值[$(…).css(cssName),注意这个cssName可以是数组]或给当前jQuery所匹配的每个元素设置样式值[$ ...