AsyncTask 与任务
Posted
技术标签:
【中文标题】AsyncTask 与任务【英文标题】:AsyncTask vs Task 【发布时间】:2018-04-12 00:09:25 【问题描述】:据我所知,在 android 中,您可以使用AsyncTask
(如果它是一个快速运行的代码)和IntentService
(如果它是一个长时间运行的代码)来执行一些并发代码,但是了解更多关于@987654323 @ 我也找到了 Task
类,在 com.google.android.gms.tasks
包下。
Task
何时优于 AsyncTask
?
为什么 Google 地图还要费心创建一个新的并发运行器类?
【问题讨论】:
有很多抽象和很多类:RxJava、Kotlin 的 Courutines、JobScheduler 的作业、SyncAdapter 等等。 嗯,但他们都来自不同的公司,对吧?我认为谷歌应该有他们的并坚持下去,或者解释为什么要使用另一个 JobScheduler, SyncAdapter, LoaderManager - 来自google,还有Future, Handler, Thread 等等……关键是Google没有单一的策略,所有团队都可以从事类似的项目并制造不同的自行车……例如,有 Agera(谷歌的 Rx)和其他死去的项目。通常你应该使用 AsyncTask - 它是官方 API 的一部分,另一方面 .gms.Task 是 3rd 方库的一部分,它可以随时删除 【参考方案1】:我从未使用过 Google Maps Task
类,但我(刚刚)通读了它的文档以及一些子类。
似乎创建Task
类是为了代表比AsyncTask
类更通用的“工作”概念。 Google Maps Task
类及其子类处理取消和恢复任务、“检查”以查看任务是否完成的能力等等。
另一方面,AsyncTask
有一个非常狭窄的目标:轻松地让您将长时间运行的任务从 UI 线程中移出,同时仍然能够更新您的响应“进度”事件或任务完成时的 UI。
Task 什么时候比 AsyncTask 更好?
对于普通程序员:几乎从来没有。任何时候你想,例如从 URL 下载图像,然后将其显示在 ImageView
中,您应该只使用 AsyncTask
(或许多可用的图像库之一)。
为什么 Google 地图还要费心创建一个新的并发运行器类?
为了解决与AsyncTask
不同类别的问题,构建处理。
【讨论】:
我会说它们完全不同。 嗯,但你描述它们的方式,Task
似乎是AsyncTask
的扩展,提供了更多控制/检查异步计算的方法。
任务本身并不是异步的。它更多的是关于如何封装“工作”包以及如何呈现/返回其结果。如果您需要将这些工作包链接起来,或者如果您需要使用之前任务的结果依次处理多个任务,那么任务的真正威力就派上用场了。
此外,由于 Firebase 正在使用 Tasks,因此将任务一起使用变得更加方便。以上是关于AsyncTask 与任务的主要内容,如果未能解决你的问题,请参考以下文章