Android關於overdraw過度繪製問題的解決辦法getWindow().setBackgroundDrawable(null);

Overdraw就是過度繪製,是指在一幀的時間內(16.67ms)像素被繪製了多次,理論上一個像素每次只繪製一次是最優的,但是由於重疊的佈局導致一些像素會被多次繪製,而每次繪製都會對應到CPU的一組繪圖命令和GPU的一些操作,當這個操作耗時超過16.67ms時,就會出現掉幀現象,也就是我們所說的卡頓,所以對重疊不可見元素的重複繪製會產生額外的開銷,需要儘量減少Overdraw的發生。

Android提供了測量Overdraw的選項,在開發者選項-調試GPU過度繪製(Show GPU Overdraw),打開選項就可以看到當前頁面Overdraw的狀態,就可以觀察屏幕的繪製狀態。

其實過度繪製通俗點來說就是給佈局設置上背景,那麼就會造成Overdraw,那麼當我們給頁面的最大的父類容器設置背景的時候,肯定會造成Overdraw了,那麼解決辦法大家可能都能在網上找到一二,其中辦法之一就是在頁面調用:

getWindow().setBackgroundDrawable(null);

或者在主題裏面調用:

android:windowbackground="null"
這個方法的作用就是去除Window也就是DecorView的背景顏色,這個背景色也是會增加一層Overdraw的,所以,當我們給我們的頁面設置過背景時,就可以調用這句代碼,減少頁面佈局最外的一層Overdraw,不過調用這句代碼得注意以下幾點:

1.這句代碼必須要在setContentView()方法之後調用,不然會出現還未給頁面設置佈局時,由於Window主題顏色被去除掉,界面會出現瞬間的黑影一閃而過,給用戶帶來不好的體驗。

2.必須要給activity最大的父佈局設置過背景,並且要match_parent,不然出現以下情況:

getWindow().setBackgroundDrawable(null);

沒有被子View遮住的部分均會顯示黑色背景,這個其實不是背景顏色了,可以理解爲不設置window顏色時默認顯示黑色。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章