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 与任务的主要内容,如果未能解决你的问题,请参考以下文章

Android异步任务AsyncTask的使用与原理分析

Android 多线程 AsyncTask 完成后台任务并反馈给UI

执行后台任务——AsyncTask 的替代方案?

Android线程管理之AsyncTask异步任务

如何管理需要由 AsyncTask 调用的不同任务

异步任务-AsyncTask