热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AsyncTask官方文档教程整理

这篇文章主要跟大家分享了关于AsyncTask官方文档的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

简介

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 {
 protected Long doInBackground(URL... urls) {
  int count = urls.length;
  long totalSize = 0;
  for (int i = 0; i 

启动异步任务:

new DownloadFilesTask().execute(url1, url2, url3);

AsyncTasks的范型参数

异步任务使用的参数是:

  • Params, 启动任务时传入的参数
  • Progress, 在后台任务执行时发布到UI线程的进度类型
  • Result, 后台任务执行完成的结果

这三个参数不一定非要指定,可以使用Void来传入空值。

private class MyTask extends AsyncTask { ... }

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()的返回值(如果可能的话)。

线程规则

  • 必须在UI线程上加载AsyncTask类。
  • 必须在UI线程上创建任务实例。
  • 必须在UI线程上调用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 [])

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 汇编语言等号伪指令解析:探究其陡峭的学习曲线
    汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ... [详细]
  • 武汉大学计算机学院研究生入学考试科目及专业方向
    武汉大学计算机学院为考生提供了多个硕士点,涵盖计算机科学与技术、软件工程、信息安全等多个领域。考研科目包括思想政治理论、英语一或二、数学一或二以及专业基础课程。具体的专业方向和考试科目详见正文。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 【行业专题报告】 人力资源专题资料
    每项专题报告都是从2019开始更新到至今,后续将持续更新如需查看完整报告和报告下载或了解更多,公众号:参一江湖今天为大家分享专题 ... [详细]
  • 深入理解Java中的Collection接口与Collections工具类
    本文详细解析了Java中Collection接口和Collections工具类的区别与联系,帮助开发者更好地理解和使用这两个核心组件。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 如何在局域网内设置电脑间资源共享盘
    本文详细介绍如何在局域网内的不同电脑之间设置资源共享盘,确保文件和资源能够安全、高效地共享。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
author-avatar
心在天堂590120_993_292
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有