Android view invalidate()使用

Android提供了Invalidate方法實現界面刷新,但是Invalidate不能直接在線程中調用,因為他是違背了單線程模型:androidUI操作並不是線程安全的,並且這些操作必須在UI線程中調用。

invalidate()是用來刷新View的,必須是在UI線程中進行工作。在修改某個view的顯示時,調用invalidate()才能看到重新繪製的界面。invalidate()的調用是把之前的舊的view從主UI線程隊列中pop掉。一個Android 程序默認情況下也只有一個進程,但一個進程下卻可以有許多個線程。

在這麼多線程當中,把主要是負責控制UI界面的顯示、更新和控件交互的線程稱為UI線程,由於onCreate()方法是由UI線程執行的,所以也可以把UI線程理解為主線程。其餘的線程可以理解為工作者線程。

invalidate()得在UI線程中被調動,在工作者線程中可以通過Handler來通知UI線程進行界面更新。

postInvalidate()在工作者線程中被調用

用invalidate()刷新界面

new Thread(){

@Override

public void run() {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

super.run();

runOnUiThread(new Runnable() {

@Override

public void run() {

mRootView.invalidate(UPDATE_MODE_FULL_GC16);

}

});

}

}.start();

如果在 oncreate 直接呼叫是無法動作的

需用 Thread 去跑

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容