Android为什么只更新UI-方案简单成熟-这也是为什么Android选择只允许主线程更新UI的原因
Android为什么只允许主线程更新UI
一、单线程更新UI方案简单成熟
简单来说,Android的设计团队为了让UI更新过程更加简单和可靠,选择了单线程模式。这样做的好处是,每个控件的设计和实现都只需要考虑单线程环境下的运行,不用担心其他线程可能会干扰UI更新。这种方案在Android之前就已经被许多图形界面API采用了,比如Swing、Qt、Windows等。
二、从执行效率看
很多人觉得,不用加锁的API肯定比加锁的效率高。但实际情况并没有那么简单。虽然合理设计一个多线程更新UI的库可能不会比单线程差,但实现这样的系统会非常复杂,带来的潜在bug也可能更多。通常来说,设计UI系统的时候,复杂性不是首要考虑的因素,如果业务需要,企业还是会选择更复杂的设计。
三、综合考虑
多线程更新UI时,最大的问题就是竞争。这个问题不仅针对单个控件,而是整个UI系统。在多数情况下,一个线程可能会同时更新多个控件,为了保证这些控件的更新是同步的,必须确保同一时刻只有一个线程在更新UI。如果做不到这一点,可能会引发各种业务逻辑问题,甚至导致死锁。
所以,虽然单线程更新UI可能在某些情况下不如多线程灵活,但考虑到事件响应的复杂性,单线程设计反而更容易实现。这也是为什么Android选择只允许主线程更新UI的原因。
来源
(由于原文中未提供具体来源,这里省略)
延伸阅读
以下是Python标准库的主要功能,供参考:
- 文本处理:包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能
- 文件处理:包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能
- 操作系统功能:包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、写日记(logging)等功能
- 网络通信:包含网络套接字,SSL加密通信、异步网络通信等功能
- 网络协议:支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多种网络协议,并提供了编写网络服务器的框架
- W3C格式支持:包含HTML,SGML,XML的处理
- 其它功能:包括国际化支持、数学运算、HASH、Tkinter等