Android工具layoutopt

Layoutopt工具是一款简单的命令行工具,它可以帮助你找到不必要的控件嵌套以及缩减布局资源的其他方法,以便尽量减少资源的使用。它让你可以了解哪些布局控件可能是多余的或不必要的。控件越少、布局层次越浅,性能就越好。

运行layoutopt工具是相当简单的,只需要跟上一个布局文件或布局文件所在目录作为参数,需要注意的是,这里你必须包括布局文件或目录的完整路径,即使你当前就位于这个目录。我们来看一个简单的例子:

D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutopt main.xml

Layoutopt的输出结果只是建议,你可以有选择地在你的应用程序中采纳这些建议,下面来看几个使用layoutopt输出建议的例子。

1. 无用的布局

在布局设计期间,我们会频繁地移动各种组件,有些组件最终可能会不再使用,如:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 
    <LinearLayout 
        android:id="@+id/linearLayout1" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:orientation="vertical"> 
        <TextView 
            android:id="@+id/textView1" 
            android:layout_width="wrap_content" 
            android:text="TextView" 
            android:layout_height="wrap_content"></TextView> 
    </LinearLayout> 
</LinearLayout>

工具将会很快告诉我们LinearLayout内的LinearLayout是多余的:

11:17 This LinearLayout layout or its LinearLayout parent is useless

输出结果每一行最前面的两个数字表示建议的行号。

2.根可以替换

Layoutopt的输出有时是矛盾的,例如:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
        android:id="@+id/linearLayout1" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:orientation="vertical"> 
        <TextView 
            android:id="@+id/textView1" 
            android:layout_width="wrap_content" 
            android:text="TextView" 
            android:layout_height="wrap_content"></TextView> 
        <TextView 
            android:text="TextView" 
            android:id="@+id/textView2" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"></TextView> 
    </LinearLayout> 
</FrameLayout>

这个布局将返回下面的输出:

5:22 The root-level <FrameLayout/> can be replaced with <merge/> 
10:21 This LinearLayout layout or its FrameLayout parent is useless

第一行的建议虽然可行,但不是必需的,我们希望两个TextView垂直放置,因此LinearLayout应该保留,而第二行的建议则可以采纳,可以删除无用的FrameLayout。

有趣的是,这个工具不是全能的,例如,在上面的例子中,如果我们给FrameLayout添加一个背景属性,然后再运行这个工具,第一个建议当然会消失,但第二个建议仍然会显示,工具知道我们不能通过合并控制背景,但检查了LinearLayout后,它似乎就忘了我们还给FrameLayout添加了一个LinearLayout不能提供的属性。

3.太多的视图

每个视图都会消耗内存,在一个布局中布置太多的视图,布局会占用过多的内存,假设一个布局包含超过80个视图,layoutopt可能会给出下面这样的建议:

-1:-1 This layout has too many views: 83 views, it should have <= 80!  
-1:-1 This layout has too many views: 82 views, it should have <= 80!  
-1:-1 This layout has too many views: 81 views, it should have <= 80!

上面给出的建议是视图数量不能超过80,当然最新的设备有可能能够支持这么多视图,但如果真的出现性能不佳的情况,最好采纳这个建议。

4.嵌套太多

布局不应该有太多的嵌套,layoutopt(和Android团队)建议布局保持在10级以内,即使是最大的平板电脑屏幕,布局也不应该超过10级,RelativeLayout可能是一个解决办法,但它的用法更复杂,好在Eclipse中的Graphical Layout资源工具更新后,使得这一切变得更简单。

下面是布局嵌套太多时,layoutopt的输出内容:

-1:-1 This layout has too many nested layouts: 12 levels, it should have <= 10!  
305:318 This LinearLayout layout or its RelativeLayout parent is possibly useless  
307:314 This LinearLayout layout or its FrameLayout parent is possibly useless  
310:312 This LinearLayout layout or its LinearLayout parent is possibly useless

嵌套布局警告通常伴随有一些无用布局的警告,有助于找出哪些布局可以移除,避免屏幕布局全部重新设计。

小结

Layoutopt是一个快速易用的布局分析工具,找出低效和无用的布局,你要做的是判断是否采纳layoutopt给出的优化建议,虽然采纳建议作出修改不会立即大幅改善性能,但没有理由需要复杂的布局拖慢整个应用程序的速度,并且后期的维护难度也很大。简单布局不仅简化了开发周期,还可以减少测试和维护工作量,因此,在应用程序开发期间,应尽早优化你的布局,不要等到最后用户反馈回来再做修改。

时间: 2024-09-14 17:24:11

Android工具layoutopt的相关文章

教你使用Android SDK布局优化工具layoutopt

创建好看的Android布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整,但笨重的嵌套布局效率往往非常低下,幸运的是,在Android SDK中有一个工具可以帮助你优化布局,以减少内存消耗,提高应用程序运行性能. 优化是需要一定技巧的,性能良好的代码固然重要,但写出优秀代码的成本往往也很高,你可能不会过早地贸然为那些只运行一次或临时功能代码实施优化,如果你的应用程序反应迟钝,并且卖得很贵,或使系统中的其它应用程序变慢,用户一定会有所响应,你的应用程序下载量将很可能

Android工具draw9patch使用点.9.png图片制作

Android工具draw9patch使用点.9.png图片制作(原文) @Author : Dolphix.J Qing 本文将以示例的形式,讲解QQ聊天气泡.9.png图片的制作过程 1 手机截屏 发送空消息体->截屏聊天界面->截取聊天气泡. 2 透明.png制作 在线ps->选择电脑已存在图->Ctrl+J(复制背景图层,并新建图层)->魔棒工具->(Delete)删除不要图色-> 解锁背景图层,并删除->保存新图层到电脑(即为透明.png) 3 制

Android工具 - 随机测试(猴子)

原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6697535 本文章的前提:已经安装了Eclipse和ADT.android SDK也下载完毕.Eclipse里面已经设置好了android SDK. 本文章将系统的介绍Android调试的各个工具.讲的会比较细,希望对大家有所帮助. 写到后面有些偏题了.实际上已经在介绍Android工具了,不仅仅是在Eclipse上的.不过没关系,现在都讲究扩展么,就当是扩展话题吧.^

Android工具:延展图片NinePatch

NinePatch能够对.png图片进行处理,生成一个.9.png格式的图片,图像拉伸操作时,图片就会有失真,而.9.png是Android里所支持的一种特殊的图片格式,可以实现部分拉伸. 制作图片方法: 1.准备一张原始图片 2.打开..SDK/tools/draw9patch.bat 3.菜单File->open..打开图片 4.左边是编辑区,右图是预览图,在图片外面的区域,单击可画黑线,按shift+单击可擦除黑线,黑线的长度决定了拉伸的区域. 5.保存.9图,菜单:File->Save

android 工具类 数据库管理

数据库工具类,优雅的管理android中的sqlite package csdn.shimiso.eim.db; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * SQLite数据库模板工具类 * *

包含很多实用android工具的xUtils框架

包含很多实用android工具的xUtils框架 xUtils 包含了很多实用的android工具.xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响.xUitls最低兼容android 2.2 (api level 8). xUtils框架源码压缩包包含的文件点击下载                                                

android 工具类 DateUtil

提取了一些在开发过程中可能会用到的日期相关的函数作为工具类,供大家参考: /** * 日期操作工具类. * * @author shimiso */ public class DateUtil { private static final String FORMAT = "yyyy-MM-dd HH:mm:ss"; public static Date str2Date(String str) { return str2Date(str, null); } public static

xUtils - android工具库 afinal 替代品

https://github.com/wyouflf/xUtils (afinal 是国人的作品,xUtils是根据afinal 修改的,也是 国人的作品) xUtils.  顾名思义,它是一个工具库. xUtils简介 xUtils 包含了很多实用的android工具. xUtils 源于Afinal框架,对Afinal进行了适当的精简,和一些适度的扩展和重构. xUtils 具有Afinal的一些特性如:无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置

Android工具:Hierarchy Viewer

Hierarchy Viewer 用途: 即可以用来优化自己的布局,也可以用来参考别人优秀的布局 打开方式: 运行工程,然后在\android-sdk-windows\tools目录下双击hierarchyviewer.bat, 使用: Inspect Screenshot 查看界面中各控件的具体位置和情况 Load View Hierarchy 查看界面中各个控件的层次结构关系 Android工具:Hierarchy Viewer