推荐安卓开发神器(里面有各种UI特效和android代码库实例)
创建好看的Android布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整,但笨重的嵌套布局效率往往非常低下,幸运的是,在Android SDK中有一个工具可以帮助你优化布局,以减少内存消耗,提高应用程序运行性能。
layoutoptimization
优化是需要一定技巧的,性能良好的代码固然重要,但写出优秀代码的成本往往也很高,你可能不会过早地贸然为那些只运行一次或临时功能代码实施优化,如果你的应用程序反应迟钝,并且卖得很贵,或使系统中的其它应用程序变慢,用户一定会有所响应,你的应用程序下载量将很可能受到影响。
在开发期间尽早优化你的布局是节省成本,提高性能的简单方法,Android SDK带来了一个工具,它可以自动分析你的布局,发现可能并不需要的布局元素,以降低布局复杂度。
第一步:准备工作
如果想使用Android SDK中提供的优化工具,你需要在开发系统的命令行中工作,如果你不熟悉使用命令行工具,那么你得多下功夫学习了。
我们强烈建议你将Android工具所在的路径添加到操作系统的环境变量中,这样就可以直接敲名字运行相关的工具了,否则每次都要在命令提示符后面输入完整的文件路径,现在在Android SDK中有两个工具目录:/tools和/platform-tools,本文主要使用位于/tools目录中的layoutopt工具,另外我想说的是,ADB工具位于/platform-tools目录下。
运行layoutopt
运行layoutopt工具是相当简单的,只需要跟上一个布局文件或布局文件所在目录作为参数,需要注意的是,这里你必须包括布局文件或目录的完整路径,即使你当前就位于这个目录。我们来看一个简单的例子:
layoutopt D:\d\tools\eclipse\article_ws\Nothing\res\layout>main.xml
注意,在上面的示例中,包含了文件的完整路径,如果不指定完整路径,不会输出任何内容,例如:
D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutopt main.xml D:\d\tools\eclipse\article_ws\Nothing\res\layout>
因此,如果你看不任何东西,则很可能是文件未被解析,也就是说文件可能未被找到。
使用layoutopt输出
Layoutopt的输出结果只是建议,你可以有选择地在你的应用程序中采纳这些建议,下面来看几个使用layoutopt输出建议的例子。
无用的布局
在布局设计期间,我们会频繁地移动各种组件,有些组件最终可能会不再使用,如:
<?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
输出结果每一行最前面的两个数字表示建议的行号。
根可以替换
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不能提供的属性。
太多的视图
每个视图都会消耗内存,在一个布局中布置太多的视图,布局会占用过多的内存,假设一个布局包含超过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,当然最新的设备有可能能够支持这么多视图,但如果真的出现性能不佳的情况,最好采纳这个建议。
嵌套太多
布局不应该有太多的嵌套,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给出的优化建议,虽然采纳建议作出修改不会立即大幅改善性能,但没有理由需要复杂的布局拖慢整个应用程序的速度,并且后期的维护难度也很大。简单布局不仅简化了开发周期,还可以减少测试和维护工作量,因此,在应用程序开发期间,应尽早优化你的布局,不要等到最后用户反馈回来再做修改。
原文名:Android SDK Tools: Layout Optimization 作者:Shane Conder和Lauren Darcey
相关推荐
8. **layoutopt**:布局优化工具,用于分析XML布局文件,提供优化建议,减少渲染时间。 9. **SDK Manager**:用于下载和管理Android SDK的各种组件,包括不同的API级别、平台工具、额外库等。 在"tools_r14"这个...
这可能包括了对Android系统API的使用,以及利用SDK工具进行性能分析、UI优化和设备模拟。 【压缩包子文件的文件名称列表】中包含的文件都是Android SDK中的核心工具和库: 1. **android.bat**:这是Android SDK ...
9. **布局优化工具layoutopt**:使用layoutopt分析和优化布局文件,减少不必要的控件嵌套,简化布局结构,以提高应用性能。 10. **使用Traceview进行性能分析**:Traceview是Android SDK自带的性能分析工具,可帮助...
9. **使用layoutopt工具**:这是一个命令行工具,用于查找和优化布局资源中的冗余和嵌套,以减少布局的复杂性,提高性能。 10. **使用Traceview等分析工具**:Android SDK自带的分析工具如Traceview,用于深入分析...
在应用优化的最后阶段,利用Traceview等性能分析工具进行全面测试,识别并解决性能瓶颈。Traceview通过图形化的界面展示应用的CPU使用情况,帮助开发者准确定位和优化性能问题。 ### 结语 通过综合运用上述技巧,...
9. **布局优化**:通过使用Layoutopt工具,可以检测并减少不必要的视图嵌套,简化布局结构,从而提升性能。 10. **使用Traceview等分析工具**:Android SDK提供了诸如Traceview这样的性能分析工具,帮助开发者识别...
- **layoutopt**:优化布局设计。 - **mksdcard**:创建虚拟SD卡映像文件。 - **ddms**:Device Debug Monitor Service,监控设备状态。 - **Traceview**:性能分析工具。 - **Hierarchy Viewer**:查看和操作UI界面...
9. **布局优化**:使用`layoutopt`工具检查布局文件,找出不必要的嵌套和冗余,简化布局以提升渲染速度。 10. **性能分析工具**:Android SDK提供了诸如Traceview之类的工具,它们可以帮助开发者识别和解决性能瓶颈...
`layoutopt`工具可以帮助分析并优化XML布局文件,提高应用的运行效率。 总的来说,Android开发需要掌握Java基础知识,理解Android系统架构,熟悉核心组件的使用,并能有效管理资源和优化布局。通过不断实践和学习,...
6. **Platform Tools**:包含针对特定Android版本的工具,例如APK反编译工具(apksigner)、布局视图查看器(layoutopt)、性能分析工具(systrace)等。 使用adt-bundle-linux-x86-20140702这个版本,开发者可以...
在处理"砖机"时,通常需要先通过USB连接设备,然后使用ADB确认设备状态,再配合其他工具进行故障定位和修复。不过,使用这些工具需要一定的技术基础,不恰当的操作可能会进一步损坏设备,因此在操作前应仔细阅读指南...
8. **layoutopt**:这是一个布局优化工具,可以分析XML布局文件并提出可能的改进建议,以减少渲染时间和提高应用性能。 9. **apkanalyzer**:这是Android Studio新增的一个工具,用于分析APK的大小、依赖关系、资源...
- 利用`layoutopt`工具来检查Layout的使用情况。 2. **列表控件的优化**: - 使用典型的MVC架构来解耦视图层和数据层。 - 通过改变Adapter来调整列表的显示逻辑。 - 实现Item控件的复用,以减少内存消耗。 - ...