Android UI加速
16lz
2021-01-23
当你的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资源
解释原因之前,需要澄清一个概念:
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>
更多相关文章
- android的selector-背景选择器
- Android 解决65535的限制 使用android-support-multidex解决Dex
- Android 应用语言切换的三种方法
- Android CheckBox中设置padding无效问题解决方法
- Android设备Root检测方法
- Android Studio中创建Selector文件的方法
- blcr加速android启动速度遇到的问题及解决方法