为什么在更新UI时要使用单线程模型作为主线程?

13
Qt文档表示, 每个程序在启动时都有一个线程。这个线程称为“主线程”(在Qt应用程序中也称为“GUI线程”)。 Qt GUI必须在这个线程中运行。
Android文档表示, 与活动和其他组件一样,服务在应用程序进程的主线程中运行。
而iOS则建议不要从后台线程(如定时器、通信等)更新UI控件等。这可能是导致很难识别的崩溃的原因。相反,使用它们来强制执行代码在UI线程上执行(这始终是“主”线程)。
为什么他们使用单线程模型来更新UI?

它增加了复杂性,却没有任何好处。另请参见https://dev59.com/ZG035IYBdhLWcg3wPNZk - Frank Osterfeld
2个回答

26

多线程工具包的链接现在指向404页面。有没有其他有效的链接? - mixtly87
@mixtly87 - 嗯,它似乎从网上消失了。看起来甚至已被从互联网档案馆中删除。真遗憾。 - Ted Hopp
1
@mixtly87 - 我在这里找到了一份副本:https://titanwolf.org/Network/Articles/Article?AID=f11696d7-ca6f-44f4-82ef-e4cdc0b264e5#gsc.tab=0 - Ted Hopp

0

iOS和Android强制你只能从主线程处理UI。原因与共享对象、线程安全[关于]在多线程环境下相同

Android示例错误

FATAL EXCEPTION: Thread-19449
E/AndroidRuntime: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views

iOS示例错误

This application is modifying the autolayout engine from a background thread" error?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接