當你的Android應用的Activity需要採用Custom drawable的背景時,採用自訂的Theme可以節省UI的載入顯示速度。
解釋原因之前,需要澄清一個概念:
window background。許多人認為這個背景應該是調用setContentView時的布局的背景,實際上,當你調用了這個方法之後,Android會把你的View添加到相應Activity的window,而這個window不僅僅包含你的View,還包含了一大堆其他的東西,1.1
圖1.1
看被藍色高亮的那個View,是一個叫做DecorView的東東,它是實際持有window's background drawable的傢伙!在當前的Activity調用getWindow().setBackgroundDrawable()方法是修改DecorView的Drawable。
如果你使用的是Android的預設主題,一個預設的背景drawable會被設定到你的Activity上(DecorView的background drawable)。大多數情況下,這不會有什麼效能的影響,但是如果你打算為你的Activity設定一個不透明的全屏圖片作為背景圖片,這時預設的背景Drawable就是多餘的,在渲染時會有一定的效能影響。
通過自訂Theme,設定android:windowBackground屬性為你自己的Drawable資源,可以替換掉預設的window background drawable。即簡單,又解決了效能問題。
例子(From Shelves)
背景Drawable資源
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/shelf_panel"
android:tileMode="repeat" />
自訂的Theme
<resources>
<style name="Theme.Shelves" parent="android:Theme">
<item name="android:windowBackground">@drawable/background_shelf</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
摘自 薛顯亮的部落格