Android官方开发文档Training系列课程中文版:布局性能优化之布局层级优化

原文地址:http://android.xsoftlab.net/training/improving-layouts/index.html

引言

布局是直接影响用户体验的关键部分。如果实现的不好,那么布局很有可能会导致内存的紧张。Android的SDK包含的一些工具可以用来检查布局性能上的问题。结合本章的课程学习,你将有能力以低成本的内存开销实现更为顺畅的UI体验。

优化布局层级

有一个常见的误解就是使用基本的布局结构会使布局更高效。然而却不是这样的,每一个控件、布局容器都需要执行初始化、排布、绘制等过程。举个例子,使用内嵌的LinearLayout会使布局层级过度加深。进一步讲,内嵌多个使用了layout_weight参数的控件所花费的代价尤其高昂,因为每个子View都需要被测量两次。这在布局被重复加载时尤为重要,比如使用在ListView或GridView中的时候。

在这节课我们将会学习如何使用Hierarchy Viewer工具及Layoutopt工具来检查、优化布局。

布局检查

Android的SDK包含了一个名为Hierarchy Viewer的工具。使用该工具可以帮助发现影响布局性能的瓶颈。

Hierarchy Viewer工作于所选择的进程上,它会显示一个布局树。每个View节点上的信号灯代表了该View在测量、排布、绘制上的性能优劣,这可以帮助你发现潜在的问题。

举个例子说明:下图是ListView的一个Item。该Item左边用于显示图片,而右边则显示两行文本。因为该Item会被进行多次加载,所以对其优化的话,那么UI性能会有显著的提升。

Hierarchy Viewer工具位于< sdk>/tools/目录下。打开后,Hierarchy Viewer会列出当前的可用设备以及设备上运行的组件。点击Load View Hierarchy来浏览所选组件的布局层级。下图是上图位于ListView中的运行效果演示:

在上图中,我们可以看到View的层级为3,并且在文本的排布上发现了一些问题。点击每个节点我们可以看到每个阶段所花费的时间(如下图所示)。那么我们就可以很清晰的知道哪个Item在测量、排布、渲染上花费的时间最长,所以我们就需要花点时间专门对其优化。

这里我们可以看到每个阶段所花费的时间:

  • Measure: 0.977ms
  • Layout: 0.167ms
  • Draw: 2.717ms

调整布局

因为上面的示例说布局的性能慢是由于内嵌了一个LinearLayout,所以改进这部分性能只能通过扁平化来处理。要尽量使布局变浅变宽,杜绝变窄变深。RelativeLayout可以实现这样的布局。所以当使用RelativeLayout实现这样的布局时,那么可以看到布局的层级变为了2。我们所看到的布局图就是这个样子:

这里写图片描述

下面是优化后的时间开销:

  • Measure: 0.598ms
  • Layout: 0.110ms
  • Draw: 2.146ms

我们可能会看到很微小的改进。

在改进时间上的大部分差别是由于LinearLayout的权重造成的,它会降低测量的速度。这里的示例仅仅是个优化手段的演示,在开发过程中应当认真考虑是否有必要使用权重。

使用Lint

开发者应该使用lint工具来检查布局层级是否有可优化的地方。Lint 与Layoutopt 相比有更加强大的功能。一些Lint的检查规则如下:

  • 使用组合图形 - 一个包含了ImageView和TextView的LinearLayout作为组合图形处理起来更加高效。
  • 合并根帧布局 - 如果一个FrameLayout是根布局,并且它没有提供背景色或内边距什么的,那么可以使用合并标签将其替换,这可以稍微的改进性能。
  • 无用的叶子节点 - 如果一个布局没有子View,没有背景色,那么通常可以将其移除。
  • 无用的中间节点 - 如果一个布局内部只含有一个子View,并且不是ScrollView或者根布局,也没有背景色,那么可以将它移除,并将其子View移动到它的父容器内。
  • 非常深的布局嵌套 - 一个被嵌套很深的布局通常不利于性能。考虑使用RelativeLayout或者GridLayout这种扁平化布局来改进性能。默认的最大深度为10。

Lint的另一个好处就是它被集成进了Android Studio。Lint会在程序编译时自动运行。

你也可以管理检查Lint的配置,在Android Studio内通过File>Settings>Project Settings路径可以找到。

Lint可以自动的修复一些问题,并且会对余下的问题提供一些优化建议,以便使开发者手动修复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 389. 找不同(位运算)

1. 题目 给定两个字符串 s 和 t&#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 2. 解题 2.1 土办法&#xff0c;哈希map class Solution { public:char findTheDifference(string …

UAS-点评侧用户行为检索系统

背景 随着整个中国互联网下半场的到来&#xff0c;用户红利所剩无几&#xff0c;原来粗放式的发展模式已经行不通&#xff0c;企业的发展越来越趋向于精耕细作。美团的价值观提倡以客户为中心&#xff0c;面对海量的用户行为数据&#xff0c;如何利用好这些数据&#xff0c;并通…

面试官如何判断面试者的机器学习水平?

文 | 陈然知乎本文已获作者授权&#xff0c;禁止二次转载记得这大概是个三年前的问题&#xff0c;每年都会有新的答案让我持续学习。三年多前我作为最早的机器学习工程师之一加入 Tubi&#xff0c;从零开始设计招聘题目和流程&#xff0c;搭建团队&#xff0c;陆陆续续也面试了…

论文浅尝 - CVPR2020 | 基于网格特征的可视问答系统

论文笔记整理&#xff1a;李爽&#xff0c;天津大学。链接&#xff1a;https://arxiv.org/pdf/2001.03615v1.pdf动机随着“自下而上”注意力的普及&#xff0c;基于边界框(或区域)的视觉特征最近已经超越了传统的基于网格的卷积特征&#xff0c;成为视觉和语言任务的事实标准。…

:批量制作档案表,要从excel表格中将每个人的数据导入到docx档案

https://www.pythonf.cn/read/149081 Python自动将Excel数据填充到word的指定位置,Word,中 具体代码如下&#xff1a; #!/usr/bin/env python3 # -*- coding: utf-8 -*- from docxtpl import DocxTemplate from openpyxl import load_workbook import osdef replace(obj):if o…

LeetCode 1078. Bigram 分词

1. 题目 给出第一个词 first 和第二个词 second&#xff0c;考虑在某些文本 text 中可能以 “first second third” 形式出现的情况&#xff0c;其中 second 紧随 first 出现&#xff0c;third 紧随 second 出现。 对于每种这样的情况&#xff0c;将第三个词 “third” 添加到…

深度学习在OCR中的应用

背景 计算机视觉是利用摄像机和电脑代替人眼&#xff0c;使得计算机拥有类似于人类的对目标进行检测、识别、理解、跟踪、判别决策的功能。以美团业务为例&#xff0c;在商家上单、团单展示、消费评价等多个环节都会涉及计算机视觉的应用&#xff0c;包括文字识别、图片分类、目…

千呼万唤始出来——GPT-3终于开源!

文 | 小戏编 | 小轶GPT3终于开源&#xff01;不过&#xff0c;不是官方开的&#xff08;别打我Eleuther AI推出的名为GPT-Neo的开源项目&#xff0c;于今晨4点于twitter正式宣布&#xff1a;已经开源了复现版GPT-3的模型参数&#xff08;1.3B和2.7B级别&#xff09;&#xff0c…

论文浅尝 - AAAI2020 | 迈向建立多语言义元知识库:用于 BabelNet Synsets 义元预测...

论文笔记整理&#xff1a;潘锐&#xff0c;天津大学硕士。来源&#xff1a;AAAI 2020链接&#xff1a;https://arxiv.org/pdf/1912.01795.pdf摘要义原被定义为人类语言的最小语义单位。义原知识库&#xff08;KBs&#xff09;是一种包含义原标注词汇的知识库&#xff0c;它已成…

美团外卖iOS多端复用的推动、支撑与思考

前言 美团外卖2013年11月开始起步&#xff0c;随后高速发展&#xff0c;不断刷新多项行业记录。截止至2018年5月19日&#xff0c;日订单量峰值已超过2000万&#xff0c;是全球规模最大的外卖平台。业务的快速发展对技术支撑提出了更高的要求。为线上用户提供高稳定的服务体验&a…

论文浅尝 - WWW2020 | 从自然语言交互中提取开放意图

论文笔记整理&#xff1a;娄东方&#xff0c;浙江大学博士后&#xff0c;研究方向为事件抽取。Vedula N, Lipka N, Maneriker P, et al. Open Intent Extraction from Natural Language Interactions[C]//Proceedings of The Web Conference 2020. 2020: 2009-2020.来源&#x…

深度学习在文本领域的应用

背景 近几年以深度学习技术为核心的人工智能得到广泛的关注&#xff0c;无论是学术界还是工业界&#xff0c;它们都把深度学习作为研究应用的焦点。而深度学习技术突飞猛进的发展离不开海量数据的积累、计算能力的提升和算法模型的改进。本文主要介绍深度学习技术在文本领域的应…

LeetCode 1009. 十进制整数的反码(位运算)

1. 题目 每个非负整数 N 都有其二进制表示。例如&#xff0c; 5 可以被表示为二进制 “101”&#xff0c;11 可以用二进制 “1011” 表示&#xff0c;依此类推。注意&#xff0c;除 N 0 外&#xff0c;任何二进制表示中都不含前导零。 二进制的反码表示是将每个 1 改为 0 且…

新分类!全总结!最新Awesome-SLU-Survey资源库开源!

文 | 哈工大SCIR 覃立波、谢天宝等指导老师 | 哈工大SCIR 车万翔教授简介口语语言理解&#xff08;Spoken Language Understanding&#xff0c;SLU&#xff09;作为任务型对话系统的核心组件&#xff0c;目的是为了获取用户询问语句的框架语义表示&#xff08;semantics frame&…

技术实践 | 用 NetworkX + Gephi + Nebula Graph 分析权力的游戏人物关系(上篇)

本文转载自公众号&#xff1a;Nebula Graph Community 。我们都知道《权利的游戏》在全世界都很多忠实的粉丝&#xff0c;除去你永远不知道剧情下一秒谁会挂这种意外“惊喜”&#xff0c;当中复杂交错的人物关系也是它火爆的原因之一&#xff0c;而本文介绍如何通过 NetworkX 访…

美团外卖Android Crash治理之路

Crash率是衡量一个App好坏的重要指标之一&#xff0c;如果你忽略了它的存在&#xff0c;它就会愈演愈烈&#xff0c;最后造成大量用户的流失&#xff0c;进而给公司带来无法估量的损失。本文讲述美团外卖Android客户端团队在将App的Crash率从千分之三做到万分之二过程中所做的大…

全栈深度学习第7期: 研究方向这么多,哪些是有有趣又潜力的呢?

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目&#xff0c;通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。Berkeley深度学习追剧群目前已有1000小伙伴加入&#xff0c;公众号后台回复口令 深度学习追剧 入群。…

会议交流 | 人工智能与机器学习创新峰会 - 知识图谱与图神经网络分会

人工智能与机器学习创新峰会力邀 HBAT 等大厂资深研发专家做分享和技术展望时间&#xff1a;9月4日下午1:30地点&#xff1a;浦东海神诺富特大酒店OpenKG开放知识图谱&#xff08;简称 OpenKG&#xff09;旨在促进中文知识图谱数据的开放与互联&#xff0c;促进知识图谱和语义技…

LeetCode 1046. 最后一块石头的重量(priority_queue 堆)

1. 题目 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出两块最重的石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两块石头都…

深度学习如何均衡精度、内存、计算和通信开销?

文 | 立交桥跳水冠军知乎本文已获作者授权&#xff0c;禁止二次转载鱼与熊掌不可兼得&#xff0c;深度学习领域中的几个指标也相同。主要的指标有如下四个&#xff1a;&#xff08;1&#xff09;精度&#xff1a;自然精度是一个模型最根本的衡量指标&#xff0c;如果一个模型精…