技巧15 去除背景,提高Activity启动时间
在Androi SDK中,你会发现一个叫做HierarchyViewer的工具。你能用这个工具检测未使用的视图,降低视图树的高度。如果你在该工具中打开了视图树,你会看到你未控制的一些节点。该技巧中,我们看看这些节点是什么、如何减弱它们,以提高Activity的启动时间。
如果我们采用默认方法创建了新的Android应用程序,并且运行它,我们会看到类似图15.1中的情形。当我们用Hierarchy Viewer打开这个Activity时,我们会看到图15.2的情形。我们需要降低视图树的高度。
首先,我们通过去掉标题来去掉一些节点。标题是灰色的、顶部写着“BackgroundTest”的条形,它由一个FrameLayout和一个TextView组成,我们通过在res/values目录下创建一个theme.xml文件来删除这些节点,内容如下:
<?xml version="1.0"encoding="utf-8"?>
<resources>
<style name="Theme.NoBackground"parent="android:Theme">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
通过修改<application>标签,我们能把这个主题应用到Android manifest中,即增加android:theme="@style/Theme.NoBackground"属性。如果我们再次运行应用程序,标题将不会再显示,视图树将看起来像图15.3所示。
你已经知道了Linearlayout和TextView是什么了,但是PhoneWindow$DecorView和FrameLayout那?
当执行setContentView()方法时FrameLayout被创建,而DecorView是视图树的根视图。默认情况下,Framework用默认的背景色填充窗口,而DecorView则拥有整个窗口背景。所以,如果我们的UI是不透明的,或者是自定义的背景,设备绘制默认的背景色是在浪费时间。
如果我们确定将使用不透明的用户接口,我们能去除默认的背景来提高启动时间。为此,我们需要在之前提到的theme中增加一行代码,如下所示:
<?xml version="1.0"encoding="utf-8"?>
<resources>
<style name="Theme.NoBackground"parent="android:Theme">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
15.1 概述
去除窗口背景是获取速度的一个简单方法。规则很简单:如果你的应用程序的UI占据了整个窗口,你应该设置windowBackground为null。记着,theme能在<application>或<activity>标签中设置。