1、为什么说invalidate()不能直接在线程中调用?
2、它是怎么违背单线程的?
3、android ui为什么说不是线程安全的?
4、android ui操作为什么一定要在UI线程中执行?请教各位大虾们?
2、它是怎么违背单线程的?
3、android ui为什么说不是线程安全的?
4、android ui操作为什么一定要在UI线程中执行?请教各位大虾们?
解决方案 »
- 请问android如何将视频文件加密,然后用android的media player进行播放呢
- GestureOverlayView自动删除输入的手势
- SMS Inbox中的person的值的疑问
- 真雷,Android的Timer和Thread如果你不显式的关闭,即使程序已经退出,它还会运行
- Document解析xml遇到的问题~~
- 关于ContentProvider与SharePreferences结合使用的问题
- android项目运行不了了,求大神解决。。。。。。。。。。
- 朋友求个安卓app,询问下报价
- 怎么实现类似淘宝的商品评价的界面
- 某activity上方多了一层半透明的层,要怎么实现
- NDK的ndk-build的一个问题
- 请教使用camera类拍照后如何返回该照片路径?
答:
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在非UI主线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。例如:在非UI线程中调用invalidate会导致线程不安全,也就是说可能在非UI线程中刷新界面的时候,UI线程(或者其他非UI线程)也在刷新界面,这样就导致多个界面刷新的操作不能同步,导致线程不安全
2、它是怎么违背单线程的?
答:一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。由于只有UI线程更新界面所以说
Android是单线程模型。 一个Android程序创建之初,一个Process呈现的是单线程模型--即Main Thread,在非主线程(UI线程)外调invalidate()刷新界面出现异常,即是说用其他的线程更新UI,android中是不被允许的。
3、android ui为什么说不是线程安全的?
答:android UI 中提供invalidate()来更新界面,而invalidate()方法是线程不安全。
4、android ui操作为什么一定要在UI线程中执行?
答:UI主线程是更新UI界面的,更新了界面才能看到运行的效果。
再者Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。
有问题,可以在博客给我留言。 会及时帮助你 http://blog.csdn.net/ORIETech ORIETech