移除背景以提升Activity启动速度

Android SDK中提供了Hierarchy Viewer工具,该工具可以用来检测未被使用的视图以减少视图树的层次。如果开发者通过该工具浏览一颗视图树,会发现许多不可控的节点。接下来,我们来看看这些节点是什么以及如何微调它们来提升Activity的启动速度。

新建一个默认应用程序,并运行该程序,会看到如下类似的界面。

移除背景以提升Activity启动速度_第1张图片

如果此时运行Hierarchy Viewer工具查看该Activity,会看到与如下类似的界面,我们需要消减视图树的层次。

移除背景以提升Activity启动速度_第2张图片

首先,通过移除标题栏来减少一些节点。标题栏就是界面上方那个显示“Hack2”的灰条,它由一个FrameLayout容器和一个TextView控件组成。可以通过在res/values目录下创建theme.xml文件删除上述节点。theme.xml源码如下:


<resources>

    <style name="Theme.NoBackground" parent="android:Theme">
        <item name="android:windowNoTitle">trueitem>
    style>

resources>

可以通过修改Androidmanifest.xml中的application标签,并添加android:theme=”@style/Theme.NoBackground”属性来使用这个主题。此时,重新运行应用程序,标题栏消失了,其View树如下图所示:

移除背景以提升Activity启动速度_第3张图片

上述图中RelativeLayout与TextView就是我们的布局文件中的控件,那么PhoneWindow$DecorView和FrameLayout又是什么?

FrameLayout是在执行setContentView()方法时创建的,DecorView是视图树的根节点。默认情况下,框架层会以默认背景色填充窗口,而DecorView就是持有窗口背景图片的视图。如果使用不透明的界面或者自定义背景,那么绘制默认背景色就完全是在浪费时间。

如果确信要在Activity中使用不透明的用户界面,就可以移除默认背景以加快Activity启动时间。要实现这个功能,需要在先前的theme.xml文件中添加一行代码。如下所示:


<resources>

<style name="Theme.NoBackground" parent="android:Theme">
    <item name="android:windowNoTitle">trueitem>
    <item name="android:windowBackground">@null
style>

resources>

移除窗口默认背景是提升应用程序启动速度的一个简单技巧。判断是否需要移除背景的原则很简单:如果应用程序界面需要占有窗口100%的空间,就需要将windowBackground属性设置为null。记住,主题既可以在application标签中设置,也可以在activity标签中设置。

你可能感兴趣的:(高质量Android)