跳到主要内容

简述invalidate与postInvalidate的区别 ?

参考答案:

invalidate和postInvalidate都是Android开发中用于刷新View界面的方法,但它们在使用场景和调用方式上存在显著的区别。

invalidate()方法主要用于在UI线程中刷新View。当需要更新View的显示内容时,例如在改变某个View的属性后,调用invalidate()方法会请求系统重新绘制该View。这个过程会将旧的View从主UI线程队列中移除,并触发View的重新绘制和布局。需要注意的是,invalidate()方法必须在UI线程中调用,以确保线程安全。

相比之下,postInvalidate()方法则可以在非UI线程中直接调用,用于刷新View界面。这在需要在子线程中更新UI时非常有用。postInvalidate()方法底层使用了Handler机制,可以在工作者线程中被调用,从而实现在非UI线程中刷新View的效果。

总结来说,invalidate和postInvalidate的主要区别在于它们的调用方式和使用场景。invalidate主要用于在UI线程中刷新View,而postInvalidate则可以在非UI线程中直接调用以刷新View。根据具体的开发需求,可以选择合适的方法来刷新View界面。