1、前言
- 众所周知在
Android中,子线程是不能更新UI的; - 那么我在想,为什么不能,会产生什么问题;
- 是否真的就一定不能在子线程更新
UI;
2、能否在子线程中更新UI
答案是可以的。
ViewRootImpl对象是在onResume方法回调之后才创建,那么就说明了为什么在生命周期的onCreate方法里,甚至是onResume方法里都可以实现子线程更新UI,因为此时还没有创建ViewRootImpl对象,并不会进行是否为主线程的判断;
3、更新UI一定要在主线程实现
谷歌提出:“一定要在主线程更新UI”,实际是为了提高界面的效率和安全性,带来更好的流畅性;反推一下,假如允许多线程更新UI,但是访问UI是没有加锁的,一旦多线程抢占了资源,那么界面将会乱套更新了,体验效果就不言而喻了;所以在Android中规定必须在主线程更新UI。
4、总结
- 子线程可以在
ViewRootImpl还没有被创建之前更新UI; - 访问
UI是没有加对象锁的,在子线程环境下更新UI,会造成不可预期的风险; - 开发者更新
UI一定要在主线程进行操作;
作者:绿茵场上的码者
链接:https://www.jianshu.com/p/58c999d3ada7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1460

被折叠的 条评论
为什么被折叠?



