简介

Android给我们提供了一种轻量级的异步任务类AsyncTask。该类中实现异步操作,并提供接口反馈当前异步执行结果及进度,这些接口中有直接运行在主线程中的(如 onPostExecute,onPreExecute等)。
AsyncTask可以轻松正确的使用UI线程,这个类允许你在后台操作,并且不需要使用threads或者handler将结果发布到UI线程。
AsyncTask设计之初就是辅助Thread和Handler的,并且不会生成线程。AsyncTask应该被用于短时间内的操作(最多几秒钟),如果你想要长时间保持线程运行,请使用Executor或者ThreadPoolExecutor或者FutureTask。
AsyncTask在后台运行任务,在UI线程发布结果,定义三个参数,Params, Progress和Result,执行四个步骤,onPreExecute, doInBackground, onProgressUpdate和onPostExecute。
使用方法
AsyncTask必须被继承来使用。子类必须实现至少一个方法(ddoInBackground(Params…)) ,还有一个最常用的方法(onPostExecute(Result) 。
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]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
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);
AsyncTasks的范型参数
异步任务使用的参数是:
这三个参数不一定非要指定,可以使用Void来传入空值。
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
4个步骤
onPreExecute() ,在应用程序执行前在UI线程上调用。这步通常被用来准备任务开始,例如显示一个进度条。doInBackground(Params…) ,在onPreExecute()方法被调用后立即执行此方法,用来执行长时间的任务。publishProgress(Progress...)来发布进度,这些值时在UI线程中发布的,在onProgressUpdate(Progress...)接收。onProgressUpdate(Progress…) , 在publishProgress(Progress...)方法调用后在UI线程调用此方法。执行时间未定义。该方法用于在后台计算仍在执行时,用户界面中显示的进度。例如,它可以用于对进度条进行动画处理或在文本字段中显示日志。onPostExecute(Result) ,在后台计算完成后在UI线程上调用。 后台计算的结果作为参数传递给该步骤。取消异步任务
任何时候都可以通过调用cancel(boolean)方法来取消任务。
调用此方法将导致对isCancelled()的后续调用返回true。
调用此方法后,onCancelled(Object) ,而不调用onPostExecute(Object)
为了尽可能快地取消任务,应该始终从doInBackground(Object [])中定期检查isCancelled()的返回值(如果可能的话)。
线程规则
execute(Params …)onPreExecute() ,onPostExecute(Result) ,doInBackground(Params …) ,onProgressUpdate(Progress …) 。内存监控
AsyncTask保证所有回调调用都是同步的,使得以下操作在没有显式同步的情况下是安全的。
onPreExecute()中设置成员字段,并在doInBackground(Params …)中引用它们。doInBackground(Params …)中设置成员字段,并在onProgressUpdate(Progress …)和onPostExecute(Result)中引用它们。执行顺序
首次引入时,AsyncTasks在单个后台线程上串行执行。
从DONUT开始,这被更改为一个允许多个任务并行操作的线程池。
从HONEYCOMB开始,任务在单个线程上执行,以避免并行执行引起的常见应用程序错误。
如果真的需要并行执行,则可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object []) 。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# asynctask的使用
# asynctask使用场景
# asynctask优缺点
# Android开发笔记之:AsyncTask的应用详解
# Android开发笔记之:深入理解多线程AsyncTask
# android教程之使用asynctask在后台运行耗时任务
# asynctask的用法详解
# Android中AsyncTask的用法实例分享
# 详解Android中AsyncTask机制
# Android中AsyncTask详细介绍
# 长时间
# 并在
# 可以使用
# 应用程序
# 都是
# 进度条
# 这步
# 首次
# 多个
# 子类
# 最多
# 不需要
# 你在
# 中有
# 给我们
# 执行时间
# 会在
# 而不
# 时间内
# 可以通过
相关文章:
宝塔面板创建网站无法访问?如何快速排查修复?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
Android自定义listview布局实现上拉加载下拉刷新功能
免费ppt制作网站,有没有值得推荐的免费PPT网站?
教学网站制作软件,学习*后期制作的网站有哪些?
建站之星如何一键生成手机站?
网站制作的步骤包括,正确网址格式怎么写?
建站之星如何助力网站排名飙升?揭秘高效技巧
建站之星安装后如何配置SEO及设计样式?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
婚礼视频制作网站,学习*后期制作的网站有哪些?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何解决ASP生成WAP建站中文乱码问题?
免费网站制作appp,免费制作app哪个平台好?
建站三合一如何选?哪家性价比更高?
建站之星如何实现PC+手机+微信网站五合一建站?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
javascript基本数据类型及类型检测常用方法小结
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何配置FTP站点权限与安全设置?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
建站OpenVZ教程与优化策略:配置指南与性能提升
如何快速查询网址的建站时间与历史轨迹?
如何自定义建站之星网站的导航菜单样式?
清除minerd进程的简单方法
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
如何快速查询网站的真实建站时间?
建站之星在线客服如何快速接入解答?
香港网站服务器数量如何影响SEO优化效果?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
大型企业网站制作流程,做网站需要注册公司吗?
,柠檬视频怎样兑换vip?
制作企业网站建设方案,怎样建设一个公司网站?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何通过商城自助建站源码实现零基础高效建站?
如何快速登录WAP自助建站平台?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
如何选择最佳自助建站系统?快速指南解析优劣
装修招标网站设计制作流程,装修招标流程?
浅谈Javascript中的Label语句
建站之星微信建站一键生成小程序+多端营销系统
微信小程序 五星评分(包括半颗星评分)实例代码
Swift中循环语句中的转移语句 break 和 continue
制作网站公司那家好,网络公司是做什么的?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
*请认真填写需求信息,我们会在24小时内与您取得联系。