笔记46 | Android性能优化之优化layout的层级(一)

地址

笔记46 | Android性能优化之优化layout的层级(一)


目录

  • 前言
  • 检查 Layout
  • 修正 Layout
  • 使用 Lint

前言

一个常见的误区是,用最基础的 Layout 结构可以提高 Layout 的 性能。然而,因为程序的每个组件和 Layout 都需要经过初始化、布局和绘制的过程,如果布局嵌套导致层级过深,上面的初始化,布局和绘制操作就更加耗时。例如,使用嵌套的 LinearLayout 可能会使得 View 的层级结构过深,此外,嵌套使用了layout_weight

参数的 LinearLayout 的计算量会尤其大,因为每个子元素都需要被测量两次。这对需要多次重复 inflate 的 Layout 尤其需要注意,比如嵌套在 ListView 或 GridView 时。

在本课中,你将学习使用

Hierarchy ViewerLayoutopt来检查和优化 Layout。


检查 Layout

Android SDK 工具箱中有一个叫做Hierarchy Viewer的工具,能够在程序运行时分析 Layout。你可以用这个工具找到 Layout 的性能瓶颈。

Hierarchy Viewer 会让你选择设备或者模拟器上正在运行的进程,然后显示其 Layout 的树型结构。每个块上的交通灯分别代表了它在测量、布局和绘画时的性能,帮你找出瓶颈部分。

比如,下图是 ListView 中一个列表项的 Layout 。列表项里,左边放一个小位图,右边是两个层叠的文字。像这种需要被多次 inflate 的 Layout ,优化它们会有事半功倍的效果。
layout-listitem.png

hierarchyviewer这个工具在<sdk>/tools/中。当打开时,它显示一张可使用设备的列表,和它正在运行的组件。点击

Load View Hierarchy

来查看所选组件的层级。比如,下图就是前一个图中所示 Layout 的层级关系。

hierarchy-linearlayout.png

在上图中,你可以看到一个三层结构,其中右下角的 TextView 在布局的时候有问题。点击这个TextView可以看到每个步骤所花费的时间。
hierarchy-layouttimes.png

可以看到,渲染一个完整的列表项的时间就是:

  • 测量: 0.977ms
  • 布局: 0.167ms
  • 绘制: 2.717ms

修正 Layout

上面的 Layout 由于有这个嵌套的 LinearLayout 导致性能太慢,可能的解决办法是将 Layout 层级扁平化 - 变浅变宽,而不是又窄又深。RelativeaLayout 作为根节点时就可以达到目的。所以,当换成基于 RelativeLayout 的设计时,你的 Layout 变成了两层。新的 Layout 变成这样:
8967864-9ce830f7eb78c2b8.png

现在渲染列表项的时间:

  • 测量: 0.598ms
  • 布局: 0.110ms
  • 绘制: 2.146ms

可能看起来是很小的进步,但是由于它对列表中每个项都有效,这个时间要翻倍。

这个时间的主要差异是由于在 LinearLayout 中使用layout_weight所致,因为会减慢“测量”的速度。这只是一个正确使用各种 Layout 的例子,当你使用layout_weight时有必要慎重。


使用 Lint

大部分叫做 lint 的编程工具,都是类似于代码规范的检测工具。比如JSLint,CSSLinkt, JSONLint 等等。译者注。

运行Lint工具来检查 Layout 可能的优化方法,是个很好的实践。Lint 已经取代了 Layoutopt 工具,它拥有更强大的功能。Lint 中包含的一些检测规则有:

  • 使用compound drawable — 用一个compound drawable 替代一个包含ImageViewTextViewLinearLayout会更有效率。
  • 合并根 frame — 如果FrameLayout是 Layout 的根节点,并且没有使用 padding 或者背景等,那么用 merge 标签替代他们会稍微高效些。
  • 没用的子节点 — 一个没有子节点或者背景的 Layout 应该被去掉,来获得更扁平的层级
  • 没用的父节点 — 一个节点如果没有兄弟节点,并且它不是 ScrollView或根节点,没有背景,这样的节点应该直接被子节点取代,来获得更扁平的层级
  • 太深的 Layout — Layout 的嵌套层数太深对性能有很大影响。尝试使用更扁平的 Layout ,比如 RelativeLayoutGridLayout 来提高性能。一般最多不超过10层。

另一个使用 Lint 的好处就是,它内置于 Android Studio 中。Lint 在你导编译程序时自动运行。Android Studio 中,你可以为单独的 build variant 或者所有 variant 运行 lint。

你也可以在 Android Studio 中管理检测选项,在

File > Settings > Project Settings
studio-inspections-config.png
中。检测配置页面会显示支持的检测项目。
Lint 有自动修复、提示建议和直接跳转到问题处的功能。


我的Android征途

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat是一个开源的Java Servlet容器,用于处理Java Servlet和JSP(Java Server Pages)请求。为了提高Tomcat的性能,我们可以采取以下一些优化措施: 1. 调整内存设置:Tomcat的性能受到内存的影响较大,可以根据服务器的硬件和预期的负载来配置JVM(Java虚拟机)的内存参数,如-Xms(初始堆大小)和-Xmx(最大堆大小)。合理配置内存可以有效地避免内存溢出和频繁的垃圾回收。 2. 合理配置线程池:Tomcat使用线程池来处理并发请求,可以通过调整线程池的大小和配置参数来提高性能。可以根据服务器的硬件配置,预估的请求数量和处理时间来合理配置线程池的大小,避免线程过多或过少的情况发生。 3. 优化静态资源的处理:静态资源(如图片、CSS和JavaScript文件)可以通过使用CDN(内容分发网络)或将其存储在独立的服务器上来提高访问速度。同时,可以启用GZIP压缩和浏览器缓存,以减少传输的数据量和渲染时间。 4. 优化数据库访问:在应用程序中,数据库访问是一个非常常见且需要优化的环节。可以使用连接池来减少数据库连接的开销,同时尽量减少不必要的SQL查询和使用合适的索引。此外,将频繁查询的数据缓存到内存中,可以大大提高性能。 5. 调整Tomcat的配置参数:Tomcat的性能也受到其自身的配置参数的影响,可以根据具体情况来调整一些重要的参数,如连接超时时间、最大请求数量、缓冲区大小等。 6. 监控和识别性能问题:在优化Tomcat性能的过程中,及时监控和识别性能问题非常重要。可以使用一些性能监控工具,如JVisualVM、JProfiler等来识别潜在的性能瓶颈和热点。 综上所述,通过调整内存设置、线程池配置、静态资源优化、数据库访问优化、调整Tomcat配置参数以及监控问题识别,我们可以有效地优化Tomcat的性能,提升应用程序的响应速度和并发处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值