UI 线程的什么
Zygote fork出的线程就是UI线程。
zygote创建App的过程中调用ActivityThread类的main()方法,main中会自行Looper.loop();。
主线程如何工作
- handler
 - loop
 - messageQueue
 
如果把UI设计成线程安全的
那么需要对控件加锁,哪一个线程拿到锁才能设置UI。
UI为什么不设计成线程安全的
- UI具有可变性,甚至是高频可变性
 - UI对响应时间的敏感性要求UI操作必须高效
 - UI组件必须批量绘制来保证效率
 
加锁可以变成线程安全,但是加锁是有性能开销的,会使UI的整体性能下降
非UI线程一定不能更新UI吗
SurfaceView可以在非UI线程更新UI:
lockCanvas -> draw -> unLockCanvasAndPost