【问题标题】:AsyncTask vs TaskAsyncTask 与任务
【发布时间】: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 方库的一部分,它可以随时删除

标签: android android-intent concurrency android-asynctask


【解决方案1】:

我从未使用过 Google Maps Task 类,但我(刚刚)通读了它的文档以及一些子类。

似乎创建Task 类是为了代表比AsyncTask 类更通用的“工作”概念。 Google Maps Task 类及其子类处理取消和恢复任务、“检查”以查看任务是否完成的能力等等。

另一方面,AsyncTask 有一个非常狭窄的目标:轻松地让您将长时间运行的任务从 UI 线程中移出,同时仍然能够更新您的响应“进度”事件或任务完成时的 UI。

Task 什么时候比 AsyncTask 更好?

对于普通程序员:几乎从来没有。任何时候你想,例如从 URL 下载图像,然后将其显示在 ImageView 中,您应该只使用 AsyncTask(或许多可用的图像库之一)。

为什么 Google 地图还要费心创建一个新的并发运行器类?

为了解决与AsyncTask不同类别的问题,构建处理。

【讨论】:

  • 我会说它们完全不同。
  • 嗯,但你描述它们的方式,Task 似乎是AsyncTask 的扩展,提供了更多控制/检查异步计算的方法。
  • 任务本身并不是异步的。它更多的是关于如何封装“工作”包以及如何呈现/返回其结果。如果您需要将这些工作包链接起来,或者如果您需要使用之前任务的结果依次处理多个任务,那么任务的真正威力就派上用场了。
  • 此外,由于 Firebase 正在使用 Tasks,因此将任务一起使用变得更加方便。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多