【问题标题】:What is standard of Ui toolkit?Ui工具包的标准是什么?
【发布时间】:2021-04-21 03:00:33
【问题描述】:

当我们尝试在 Thread 而不是 Ui 线程中更改 Ui takeit 时,我们会看到此错误。

W/System.err: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
W/System.err:     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7334)

我只是想知道 Ui 工具包的标准。

我认为每个视图都是 Ui takeit。 但是我在另一个线程中将文本设置为 TextView,没有发生错误。 (MainActivity的布局中没有出现TextView)

那么,Ui组件在当前Activity的布局中发生变化是不是错误呢?

【问题讨论】:

    标签: android multithreading ui-thread


    【解决方案1】:

    我想你知道为什么 Google 称其为“UI Thread”。正确的? 这是谷歌文档中的一段:

    当一个应用程序启动时,系统会创建一个线程 应用程序的执行,称为“main”。这个话题很 很重要,因为它负责向 适当的用户界面小部件,包括绘图事件。它是 也几乎总是你的应用程序与之交互的线程 Android UI 工具包中的组件(来自 android.widget 和 android.view 包)。因此,主线程是 有时也称为 UI 线程。

    您可以在这里阅读更多内容:https://developer.android.com/guide/components/processes-and-threads#Threads

    因此,对于您的问题,UI 组件不需要在当前 Activity 中进行更改。

    应该在主线程中更改

    如果你仔细阅读谷歌的文档。您可以看到 Google 不建议从其他线程更改或修改视图。(不是 UI 线程)。

    1. 不要阻塞 UI 线程

    2. 不要从 在 UI 线程之外

    【讨论】:

    • 我还有一个问题。我成功地在另一个线程中的 setText 方法而不是我的 MainActivity 中的主线程。但是 Textview 不在 MainActivity 的布局中,所以用户看不到 TextView。它只是在另一个布局中。我怎么能这样做???
    • 对不起。我不明白你的意思。你能更详细地解释一下吗?或者告诉我你的代码
    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 2013-12-14
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多