【发布时间】:2019-10-08 12:18:48
【问题描述】:
我了解了 Kotlin 协程,我了解它的工作原理,但我对 Kotlin 协程和 Android Async.execute() 和 Async await 之间存在混淆。 Kotlin 协程在后台运行,不会阻塞 UI 线程,但是当我们启动 android AsyncTask 时会发生同样的事情(使用方法 doInBackground onPostExecute 和 onProgressUpdate 覆盖),它也在后台进行计算线程并在 UI 线程上发布结果。
async-await 返回一个 Defered 对象意味着结果显然会在未来返回。
谁能解释一下它们之间的区别。
【问题讨论】:
-
基本上他们做同样的事情,只是在细节和 API 设置上有所不同。它们都异步执行任务并为您提供在未来获取结果的方法,await 只是让同一个线程等待未来的结果,本质上强制任务同步。
-
主要区别我看到
AsyncTask默认在SingleThreadPoolExecuter中运行,因此默认情况下您不能并行运行多个AsyncTask。除此之外,AsyncTask如果处理不当,通常会留下内存泄漏.. 我的坚果壳 Kotlin 协程是一种优雅的异步调用方式,没有任何回调接口,非常类似于RXjava.. -
@jackz314 如果我使用这样的异步等待 myAPIService.getWeather(location).await() 然后 myAPIService.getDetails(id).await() ,你的意思是说第一个 api 得到结果getWeather 然后 getDetails ??
-
是的,如果您调用
await(),那么线程将等待任务完成执行下一行,这与普通同步代码的行为相同。 -
他们都解决了同样的问题。后台处理。这个想法是哪一个是最好的。我个人使用协程。 Google 已经弃用了
AsyncTask。他们只是有不同的实现
标签: android android-asynctask async-await kotlin-coroutines