Android Overdraw過渡繪製

過度繪製描述的是屏幕上一個像素在單個幀中被重繪了多少次。比如一個有背景的TextView,那麼顯示文本的那些像素至少繪製了兩次,一次是背景,一次是文本。過度繪製是Android平臺上一個很棘手的性能問題,它非常容易出現,幸運的是,它也同樣容易被修復。我們可以通過手機設置裏面的開發者選項,打開Show GPU Overdraw的選項,來查看某個app過度繪製的情況。

顯示這個像素被過度繪製的次數。一共有四種顏色:藍色、綠色、淡紅、深紅。根據過度繪製的次數,依次遞增。1x過度繪製是藍色、2x是綠色、3x是淡紅、4x是深紅。

過渡繪製產生的原因

  1. 太多重疊的背景
    重疊着的背景有時候是有必要的,有時候是沒必要的。這要視你的項目具體情況而定.
  2. 太多疊加的View
    或者本來這個UI佈局就很複雜或者你是爲了追求一個炫麗的視覺效果,這都有可能使得很多view疊加在一起。這個情況非常普遍,下面的建議中會談談怎麼減少這種情況帶來的影響。
  3. 複雜的Layout層級
    複雜的層級關係,這個在佈局中也很常見,下面也會說這種情況怎麼做可以儘可能的減少過度繪製。

解決方案建議

  1. 太多重疊的背景
    這個問題其實最容易解決,建議就是檢查你在佈局和代碼中設置的背景,有些背景是被隱藏在底下的,它永遠不可能顯示出來,這種沒必要的背景一定要移除,因爲它很可能會嚴重影響到app的性能。如果採用的是selector的背景,將normal狀態的color設置爲”@android:color/transparent”,也同樣可以解決問題。
  2. 太多重疊的view
    第一個建議是:使用ViewStub來加載一些不常用的佈局,它是一個輕量級且默認不可見的視圖,可以動態的加載一個佈局,只有你用到這個重疊着的view的時候才加載,推遲加載的時間。第二個建議是:如果使用了類似viewpager+Fragment這樣的組合或者有多個Fragment在一個界面上,需要控制Fragment的顯示和隱藏,儘量使用動態地Inflation view,它的性能要比SetVisiblity好。
  3. 複雜的Layout層級
    這裏的建議比較多一些,首先推薦用Android提供的佈局工具Hierarchy Viewer來檢查和優化佈局。第一個建議是:如果嵌套的線性佈局加深了佈局層次,可以使用相對佈局來取代。第二個建議是:用標籤來合併佈局,這可以減少佈局層次。第三個建議是:用標籤來重用佈局,抽取通用的佈局可以讓佈局的邏輯更清晰明瞭。記住,這些建議的最終目的都是使得你的Layout在Hierarchy Viewer裏變得寬而淺,而不是窄而深。

參考文章:http://www.open-open.com/lib/view/open1421656495031.html

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