invalidate和postInvalidate都可以实现界面刷新
Invalidate不能直接在线程中调用,违背了单线程模型,必须在UI线程中调用。
如果要在子线程中刷新界面,实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。
postInvalidate()可以在子线程中被调用,使用起来比较简单,不需要handler,直接在线程中调用postInvalidate即可。
区别与联系
invalidate() 方法在 UI 线程中调用,重绘当前 UI。
postInvalidate() 方法在非 UI 线程中调用,通知 UI 线程重绘。
postInvalidate()中底层实现还是通过Hanlder +invalidate(),只不过被封装起来,因此postInvalidate()可以在子线程中刷新界面