首页 > 解决方案 > 将 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是一个糟糕的解决方案,很快就会被谷歌弃用,所以我很怀疑。如果有任何其他替代方法可以在后台线程上执行我的请求,如果您能指出的话,我将不胜感激。

我不想使用改造或任何类似的替代品。

标签: androidkotlinandroid-asynctask

解决方案


实际上使用 AsyncTask 完全没问题。它是核心 Android 的一部分,在不久的将来不会被删除。然而 AsyncTask 有一些缺点,因此许多开发人员使用更“干净”和“强大”的解决方案,如 Coroutines 或 RxJava。在您的情况下(考虑到您用 Kotlin 编写的代码),如果您想要一种现代方法,您应该考虑迁移到 Kotlin Coroutines


推荐阅读