android - 将 AsyncTask 与 Runnable 一起使用
问题描述
我的存储库中有以下代码:
class BusRepositoryImpl(
private val busService: BusService
) : BusRepository
override fun get(id: String, callback: Callback<BusItem>){
AsyncTask.execute {
try {
val apiResponse = busService.get(id)
callback.onResponse(apiResponse.bus)
}
catch (e: Exception){
callback.onFailure(e)
}
}
}
}
公交服务:
class BusServiceImpl(private val baseUrl: String, private val httpClient: HttpClient)
override fun get(id: String): ApiResponse {
return httpClient.get("${baseUrl}/bus/$id")
}
视图模型:
fun get(id: String) {
busRepository.get(id, object: Callback<BusItem>{
override fun onResponse(data: BusItem) {
busLiveData.postValue(data)
}
override fun onFailure(t: Throwable) {
errors.postValue(t)
}
})
}
到目前为止它有效,但我想知道这样使用是否AsyncTask
会导致任何问题。我听说这AsyncTask
是一个糟糕的解决方案,很快就会被谷歌弃用,所以我很怀疑。如果有任何其他替代方法可以在后台线程上执行我的请求,如果您能指出的话,我将不胜感激。
我不想使用改造或任何类似的替代品。
解决方案
实际上使用 AsyncTask 完全没问题。它是核心 Android 的一部分,在不久的将来不会被删除。然而 AsyncTask 有一些缺点,因此许多开发人员使用更“干净”和“强大”的解决方案,如 Coroutines 或 RxJava。在您的情况下(考虑到您用 Kotlin 编写的代码),如果您想要一种现代方法,您应该考虑迁移到 Kotlin Coroutines
推荐阅读
- .net - 创建表并立即输出结果[db2-400]
- python - MongoDB Atlas 查询需要很长时间才能完成
- firebase - Cloud Firestore 保持缓存查询多次调用?
- python - Selenium:driver.implicitly_wait() 和 time.sleep() 之间的不同行为
- html - 没有最后一个孩子的 CSS 属性
- apache-spark - 避免在 WHERE 中使用 SELECT
- git - 无法从 git 中的远程存储库推送或获取
- javascript - 如果语句不适用于 document.querySelector
- web-scraping - 刮 Highchart,缺少数据
- rust - 如何在 nom 中获取 N 位字节?