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

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

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

这里写图片描述

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

这里写图片描述

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

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

这里写图片描述

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<resources>

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

</resources>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值