程序的每个组件和 Layout 都需要经过初始化、布局和绘制,如果布局嵌套层次过深,就会导致加载操作更为耗时,更严重的话还可能导致内存溢出。本节我们学习使用两个工具来检查和优化 Layout。

HierarchyViewer

该工具位于Android SDK tools中,使用HierarchyViewer可以分析正在运行app的布局,从而打破影响布局性能的瓶颈。

HierachyViewer通过选择运行在模拟器或真机上的进程来工作,并通过布局树来展示。上面每个标识代表布局的Measure、Layout和Draw的性能,帮助开发者来定位潜在的问题。

如图1所示,图中是ListView中的一条布局,这个布局左边是一个ImageView,右边是一个LinearLayout中嵌套两个TextView布局。

图1

HierarchyView工具可以用于Android模拟器,打开后,即可看到可用设备列表和运行的组件。在Windows选项卡里,点击Hierarchy View后,即可看到选择组件的布局层次结构。例如图2 展示了图1 的ListItem布局的层次结构。

图2

减少层次结构

 

由于上图使用了嵌套的LinearLayout结构布局,导致性能变慢。我们可以使用扁平化的思想来优化它们——布局要宽而广,而不是窄而深! 我们可以使用Relativelayout来作为顶级节点,这样转向RelativeLayout来布局之后,我们会看到下图这样的布局层级结构。

图3

修改为RelativeLayout布局之后,层级减少,布局性能大大增强。另外,LinearLayout中的layout_weight也会减慢measure的速度,所以不是必要时不要使用layout_weight属性。这只是一个小小的例子,在一些非常复杂的布局中,如果层级太多或LinearLayout嵌套过多,系统会将很大性能消耗在UI的measure计算上面,因此,层级结构优化至关重要。

Lint

Android Lint是在 ADT 16 提供的新工具,它是一个代码扫描工具,Lint已经替代了Layoutopt tool成为重要的提示工具,它具有更多更高级的功能 ,能够帮助我们识别代码结构存在的问题。Lint 包含的一些检测规则有:

  • 使用 compound drawable 替代一个包含 ImageView 和 TextView 的 LinearLayout。

  • 合并根 FrameLayout

  • 没用的子节点或父节点

  • 硬编码问题

另外,开发者可以通过 File>Settings>Project Settings 来管理配置文件。

最新文章

  1. phantomjs+selenium实现爬取动态网址
  2. javaee学习-新建servlet 直接返回html
  3. java数组或集合返回空的问题
  4. felx基础知识
  5. 关于ionic的一些坑(2)
  6. 【MySQL】数据库字段类型
  7. 求解n皇后
  8. linux下(fdisk,gdisk,parted)三种分区工具比较
  9. [Mysql]一些知识点
  10. DELPHI中MDI子窗口的关闭 和打开
  11. thinkphp5.0.7 &===composer更新===& thinkphp5.0.9 debug “controller not found”
  12. expdp和impdp导入导出用法【转】
  13. sql语句出错:Column count doesn't match value count at row 1
  14. jenkins权限控制
  15. Django(ORM常用字段)
  16. node 工程化 web项目
  17. VC++字符串的使用及转换
  18. 小程序 - API 踩坑记录(更新中...)
  19. Region在connection前后进行“交并差”等操作的异同
  20. 基于python的几种排序算法的实现

热门文章

  1. ASP.NET Core MVC 中设置全局异常处理方式
  2. linux上安装Oracle 11g R2 标准版 64位
  3. java 文件操作 写入和读取(小结一)
  4. esri-leaflet部分瓦片缺失问题及解决办法
  5. esri-leaflet入门教程(4)-加载各类图层
  6. ES6__异步开发优化
  7. PB程序“无法启动此程序,因为计算机中丢失PBvm90.dll。尝试重新安装该程序以解决此问题”的解决方法
  8. iOS开发-APP测试基本流程
  9. EntityFrameworkCore使用Migrations自动更新数据库
  10. Android -- RecyclerView实现顶部吸附效果