50 Android hacks(hack15)



技巧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所示。

    你已经知道了LinearlayoutTextView是什么了,但是PhoneWindow$DecorViewFrameLayout那?

         当执行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占据了整个窗口,你应该设置windowBackgroundnull。记着,theme能在<application><activity>标签中设置。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值