invalidate() and postInvalidate()

/**
* Invalidate the whole view. If the view is
visible,
* {@link #onDraw(android.graphics.Canvas)} will be
called at some point in
* the future. This must be called
from a UI thread. To call from a non-UI thread,
* call
{@link #postInvalidate()}.
*/

invalidate():This must be called from a UI thread

postInvalidate():This must be called from a non-UI
thread

时间: 2024-10-07 06:57:51

invalidate() and postInvalidate()的相关文章

通过查看源码,查看invalidate和postInvalidate的区别

查View的源码可知: postInvalidate是使用handler发送消息,即可以使用在非UI线程中,而invalidate直接修改布局,所以只能用在UI线程里了. public void invalidate() { invalidate(true); } void invalidate(boolean invalidateCache) { if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.Hierarchy

【Android】android中Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在

Android开发 View的UI刷新Invalidate和postInvalidate

Invalidate 正常刷新 /** * 使整个视图无效.如果视图可见, * {@link #onDraw(android.graphics.Canvas)} 调用此方法后将在后续的UI刷新里调用onDraw(android.graphics.Canvas)方法 * <p> * 必须从UI线程调用此方法.要从非UI线程调用,请调用{@link #postInvalidate()}.*/ public void invalidate() { invalidate(true); } /** *

invalidate()和postInvalidate()的使用与区别

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型: Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时,调用invalidate()才能 看到重新绘制的界面.invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉. Android 程序默认情况下也只有一个进程,但

Android笔记:invalidate()和postInvalidate() 的区别及使用

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面.invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉. 一个Android 程序默认情况下也只有一个进程,但

Android View 深度分析requestLayout、invalidate与postInvalidate

requestLayout 当我们动态移动一个View的位置,或者View的大小.形状发生了变化的时候,我们可以在view中调用这个方法,即: 1 view.requestLayout(); 那么该方法的作用是什么呢? 从方法名字可以知道,“请求布局”,那就是说,如果调用了这个方法,那么对于一个子View来说,应该会重新进行布局流程.但是,真实情况略有不同,如果子View调用了这个方法,其实会从View树重新进行一次测量.布局.绘制这三个流程,最终就会显示子View的最终情况.那么,这个方法是怎

android中Invalidate和postInvalidate的差别

Android中实现view的更新有两组方法,一组是invalidate.还有一组是postInvalidate.当中前者是在UI线 程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新.可是Invalidate不能直接在线程中调用.由于他是违背了单 线程模型:Android UI操作并非线程安全的,而且这些操作必须在UI线程中调用. Android程序中能够使用的界面刷新方法有两种.各自是利用Handler和利用postInvalidate()来实

android中Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在

requestLayout, invalidate和postInvalidate的异同

requestLayout 当一个VIEW的布局属性发生了变化的时候,可以调用该方法,让父VIEW调用onmeasure 和onlayout重新定位该view的位置,需要在UI线程调用 invalidate 强制使view重绘,需要在UI线程调用 postinvalidate 作用同上,但是可以直接在子线程调用