共同学习,对invalidate和postInvalidate的理解和理解上的一些有关问题?

共同学习,对invalidate和postInvalidate的理解和理解上的一些问题??

    简单学习了下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线程?

------解决方案--------------------
该回复于2010-12-06 09:13:58被版主删除

------解决方案--------------------
 国庆快乐共同学习,对invalidate和postInvalidate的理解和理解上的一些有关问题?
------解决方案--------------------
1. 书上提到invalidate不能直接在线程中调用...
主要就是同步的问题。
2.如果要在非UI线程中刷新界面...
invalidate()得在UI线程中被调动,在工作者线程中可以通过Handler来通知UI线程进行界面更新。而postInvalidate()在工作者线程中被调用
3.另外,主线程就是UI线程吗...
主线程就是你的程序的主activity所在线程。子线程就是在主activity中new出来的那些thread,不只是onCreate的里才是主线程,ondestroy,onresume等,和对应整个activity的所有处理都是属于主线程的。规定就是主线程中用invalidate,子线程中只能用handler或者直接post才行。
------解决方案--------------------
postInvalidate()好像是用户线程中强制刷新的