首页 > 解决方案 > 后台线程中的 UI 更改

问题描述

我有一个函数,当请求被执行并完成时,这个函数在后台线程中发送 http 请求我必须做些什么来解决这个问题

    val url = "BASE_DIR/example"
    val client = OkHttpClient()
    val request = Request.Builder().url(url).build()

    val code = client.newCall(request).execute().code()

    if (code == 200) {
        
        fragment.requireActivity().runOnUiThread { 
            fragment.refresh.isRefreshing = false
        }

标签: androidkotlin

解决方案


向 UI 线程发送消息的另一种方法是使用Handler

Handler(Looper.getMainLooper()).post {
    // do whatever
}

或者你有常用的postDelayed方法等。所以你可以fragment在不需要附加到的情况下更新它Activity,这可能比只做一个空检查更好getActivity(片段可能只是暂时分离,所以你仍然想更新它的状态所以你不会“失去”结果)。

如果您不介意丢失结果,因为您将分离的片段视为已死,因此不需要更新,那么像@rahat 的答案中的空检查是最简单的方法。不要让它变得比它需要的更复杂!


推荐阅读