首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android为什么可以在非ui线程中更新ui

Android为什么可以在非ui线程中更新ui
EN

Stack Overflow用户
提问于 2021-08-31 08:35:17
回答 2查看 39关注 0票数 0

下面是我的简单代码和logcat

代码语言:javascript
复制
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textView = findViewById(R.id.textView)

        println("onCreate " + Thread.currentThread().name)

        Thread(){

            println("Thread " + Thread.currentThread().name)
            textView.text = "1"
        }.start()

        textView.setOnClickListener {

            Thread(){

                println("Thread click " + Thread.currentThread().name)
                textView.text = "1"
            }.start()
        }
    }
代码语言:javascript
复制
onCreate main
Thread Thread-2

我不明白为什么我可以在Thread-2上更新ui

然后单击textView并获取日志

代码语言:javascript
复制
onCreate main
Thread Thread-2
Thread click Thread-3

应用程序崩溃并获取错误Only the original thread that created a view hierarchy can touch its views.

这没问题,因为我不能在Thread-3上更新ui。

但是为什么Thread-2可以呢?

EN

回答 2

Stack Overflow用户

发布于 2021-08-31 08:57:12

只在主线程上更新UI并不是所有地方都严格执行的,有时视图系统处于一种您可以逃脱惩罚的状态。你无论如何都不应该这样做。

您可以检查Only the original thread that created a view hierarchy can touch its views的堆栈跟踪,以了解主线程强制在您的案例中的位置。

票数 0
EN

Stack Overflow用户

发布于 2021-08-31 08:45:45

UI只能在主线程中更新

代码语言:javascript
复制
runOnUiThread {
    //code that runs in main
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68995384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档