简单学习了下android中的UI界面刷新,大家看看我对invalidate和postInvalidate的理解有什么不对的地方,下面也提到几个不懂的问题,请大家赐教! Android中在绘图中的多线程中,invalidate和postInvalidate这两个方法是用来刷新界面的,调用这两个方法后,会调用onDraw事件,让界面重绘。 书上提到invalidate不能直接在线程中调用,这里的线程是指的子线程(非UI线程)吧?因为在非UI线程中调用invalidate会导致线程不安全,也就是说可能在非UI线程中刷新界面的时候,UI线程(或者其他非UI线程)也在刷新界面,这样就导致多个界面刷新的操作不能同步,导致线程不安全,是不是这样? 在非UI线程中我们可以使用Handler类来发送消息到UI线程队列中,由UI线程来负责安排刷新界面。这是线程安全的。
如果要在非UI线程中刷新界面,需要用到postInvalidate,使用这个方法不用Handler来接收消息,能直接刷新,那么postInvalidate这个方法是如何保证线程安全的呢?? 另外,主线程就是UI线程吗?子线程就是非UI线程吗?如何区分UI线程和非UI线程,是不是在onCreate里面写的代码属于UI线程,其他地方是非UI线程?
解决方案 »
- Android程序如何启动UC浏览器或者Android自带浏览器
- android 从SD卡导入vCard文件到通讯录 号码带"-" 如何把横线去除
- 音乐播放error
- 哪有"hello android" 之类的教程?
- 给actionBar添加tab有两种 一种是固定的 一种是滚动的 问下滚动的是怎么添加的
- 求大神帮忙修改一下代码,关于访问网络超时的处理。
- android 实现查看pdf
- 用android实现了简单的拨号功能,模拟器下没有问题,部署到真机上,就是没反应
- Android中的消息通知(NotificationManager和Notification)
- 最近安装Android studio运行有问题
- Android真机如何访问PC上的tomcat
- NFC开发问题
主要就是同步的问题。
2.如果要在非UI线程中刷新界面...
invalidate()得在UI线程中被调动,在工作者线程中可以通过Handler来通知UI线程进行界面更新。而postInvalidate()在工作者线程中被调用
3.另外,主线程就是UI线程吗...
主线程就是你的程序的主activity所在线程。子线程就是在主activity中new出来的那些thread,不只是onCreate的里才是主线程,ondestroy,onresume等,和对应整个activity的所有处理都是属于主线程的。规定就是主线程中用invalidate,子线程中只能用handler或者直接post才行。
这一篇挺好。