gpt4 book ai didi

Android 小部件,绘制 UI 线程

转载 作者:太空狗 更新时间:2023-10-29 12:50:14 30 4
gpt4 key购买 nike

引用此处找到的 Android 开发人员指南 here它说

Additionally, the Andoid UI toolkit is not thread-safe. So, you must not manipulate your UI from a worker thread—you must do all manipulation to your user interface from the UI thread

小部件不是线程安全的是什么意思?当我们从 UI 线程更改按钮的名称时,导致应用程序崩溃的原因。我知道 UI 线程有一个事件队列,但单独的线程如何导致此队列出现问题?我试着环顾四周,到处都说你不能这样做,但没有理由为什么?

最佳答案

当文档说 UI 工具包不是线程安全的时,这意味着 UI 工具包的编写方式假定对 UI 对象的所有访问都来自单个线。通过这种假设,UI 工具包的实现者可以对所有 UI 对象进行非同步访问,而不必担心数据损坏。这使得 UI 工具包更易于实现,更易于测试,并提高了 UI 工具包的性能(因为它不需要在操作对象之前锁定对象)。

UI 工具包设计为仅在主线程(也称为“UI 线程”)上运行。如果您现在从另一个线程访问 UI 组件,您将面临损坏 UI 工具包对象的风险。为确保您不会那样做,UI 工具包设计人员做了两件事:

  • 他们在文档中写道,您不应该从主线程之外访问 UI 工具包
  • UI 工具包的一些(但不是全部)方法会检查您是否从主线程外部进行访问,并在这种情况下抛出异常

但是,这不会强制阻止您从另一个线程访问 UI 工具包。事实上,您可以从另一个线程更改按钮上的文本,而不会产生任何不良副作用。也就是说,你仍然不应该这样做。因为在某些情况下你会导致崩溃,在某些情况下你会发现你对 UI 所做的更改只是被覆盖或忽略等等。

我希望这是有道理的。

关于Android 小部件,绘制 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853786/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com