分类: LINUX
2009-06-16 17:07:54
前边已经介绍了如何通过Layout优化系统资源,减少不必要的资源占用。基于如何在合理利用资源的前提下,更进一步的提升视觉表现力。这里所提到的视觉表现力并不是指直观所看到的视觉效果,而是性能的提升。
这里将包含两个主要内容:
以上两个性能的优化都将依赖于 Window backGround drawable功能设置。
通过Window backGround标识会对部分人产生一定的误解,其实每次通过setContentView()来显示预先配置的界面时,Android仅仅是将你所 创建的Views添加到Activiy的Window中。而且这个Window并不仅仅包含你所创建的Views,还包括Android为 Activity预置的元素。通过Emulator运行你的程序,然后通过Hierarchy Viewer查看当前程序UI架构Root节点 DecorView,这个是Android额外添加的最顶层的节点。
实际上Window background drawable是由DecorView决定的。可以在Activity中调用方法来设置DecorView的background drawable。这里要特别注意这个方法是针对当前版本的Android平台,以后可能会因为版本的更新或不同的硬件设备而改变。(目前我们仅针对G1,如果在其它环境下测试需要小心验证)
如果目前正在使用android默认的标准Themes,那么在调用方法之后,这个background drawable将会影响你的activities。通过一个例子来直观的比较性能提升的效果:
通过上边这个截图可以看到保持activity的redraw模式下,当前的FPS为39帧 /每秒,大概相当于25毫秒/每帧。由于这个例子中将ImageView设为全屏显示,并且完全覆盖了activity的背景,所以background drawable占用了不必要的计算资源。下边创建一个新的Theme并且应用在Activity中,创建res/values/theme.xml, XML的内容:
<resources>
<style name="Theme.NoBackground" parent="android:Theme">
<item name="android:windowBackground">@null</item>
style>
resources>
同时也需要修改AndroidMainfest.xml文件,将上边所创建的Theme应用到Activity中,格式为:
android:label="@string/app_name"
android:theme="@style/Theme.NoBackground">
(也可以将Theme应用于
FPS可以增大到60+,性能得到如此大的提升,是不是比较难以置信呢?由此可以明白当应用MapView或者WebView全屏显示的应用程序时,可以借用这个简单设置的方法,来提升整体的性能。
通过上边的例子可以直观的了解window background drawable的优化方法,并且根据比较可以很明显的看到设置前后的性能对比,希望这个简单的技巧可以给你的应用带来帮助。
另外基于这个技巧的应用,还可以延展出另外一个优化功能。对于某些需要全屏显示的应用程序,可以通过Theme定义Window’s background的图片,从而提高Activity的启动速度。毕竟无需建立一个ImageView作为自定义的背景,而重复叠加在Activity window background。
实现方法:
创建 res/drawable/background_res.xml
<bitmap xmlns:android=""
android:src="@drawable/shelf_panel"
android:tileMode="repeat" />
创建res/values/theme.xml
<resources>
<style name="Theme.Shelves" parent="android:Theme">
<item name="android:windowBackground">@drawable/background_res</item>
- true
item>
style>
resources>
往往一些看似简单的方法,却能起到非常大的作用。还希望大家在实践中能不断的挖掘出非常实用的技巧,然后与你周围的人共享你的发现,同时在大家共同的见证下可以完善你的想法!