【Android必问面试题】Android性能优化之布局优化

面试当中一定会问的问题,你在项目当中做了哪写优化?本章着重介绍我们在开发当中对布局方面做的一些优化项。

Android系统的屏幕存在着怎样的刷新机制?

既然提到布局的优化,首先我就要了解Android系统是怎么刷新屏幕的显示,我们都知道如果我们想要屏幕流畅的运行,那么我们就要保证UI全部的测量(Measure),布局(Layout),绘制(draw)全部的耗时在16ms内。那么为什么是16ms呢?
这是因为人眼与大脑的协作无法感知超过每秒60帧的画面更新,用1000除以60得到一个大约的时间就是16ms。

在布局方面我们应该遵守哪些优先原则?

  • FrameLayout优先选择
  • RelativeLayout的选择优先性取决于布局是否复杂,RelativeLayout可以较简单的实现LinearLayout需要嵌套才可以实现的布局。
  • RelativeLayoutLinearLayout可以同时满足需求时,我们优先选择LinearLayout,因为RelativeLayout实现较为复杂,会出现重复测量的情况。通过日志打印可以看到RelativeLayout经常会出现对子View进行两次的测量来确保子View被放在正确的位置上。当然如果LinearLayout添加了weight属性的话,也会对子View进行两次测量,这里需要注意的是,如果出现多层嵌套的话,测量的次数会成指数增长。

布局当中要避免Overdraw

什么是Overdraw?

  • Overdraw是指屏幕上的某一个像素点在同一帧的时间绘制了多次。
    我们可以通过开发者模式中打开过度绘制的开关看到屏幕的绘制情况,通常情况下我们通过四种颜色来展示不同程度的Overdraw情况。
  • 蓝 1xOverdraw
  • 绿 2xOverdraw
  • 红 3xOverdraw
  • 暗红 4xOverdraw
    当我们程序中出现大范围的红或者暗红的时候我们就需要对我们的布局进行优化。

能通过ConstaintLayout完成的布局尽可能用此布局

ConstaintLayout属于Android Studio 2.2的新特性,它可以有效地解决布局嵌套过多的问题。

布局优化中各种标签的使用

Android中为我们提供了三种布局的标签可以使用,分别为includemerge以及ViewStub

include

在一个布局中引入另一个布局。如果多个页面中有相同的布局,这样可以将相同的部分提取出来,供各个layout使用,提高代码的复用性。这里需要注意的是include标签中可以覆盖引入的layout的跟布局的属性,比如宽高的定义等。

merge

merge标签的作用主要是减少布局的嵌套层次,优化布局层级,提高布局的加载效率。他可以看作是include标签的辅助以及拓展,比如我们的布局跟布局是一个LinearLayoutinclude的布局文件中也是一个LinearLayout,且两个布局都是垂直布局,这是我们就可以将include布局文件中的跟布局改为merge,这样就减少了LinearLayout的层级嵌套,引入的方式就可以改为merge

ViewStub

ViewStub只有在加载该布局的时候才会占用资源,不可见的状态下不会对其进行绘制。

一些原生View的优化

最常问的就是ListView的优化

  • 复用convertView,重复使用回收的view
  • 使用viewholder
  • 分页加载数据

webview的优化

  • 全局webview 提前启动,减少webview首次启动的耗时
  • 代理数据请求 通过native去向网络请求数据,webview初始化之后从native去要数据。
  • 优化加载速度 设置webview禁止加载图片,在初始化之后在进行图片加载。

文章主要介绍在面试中我们需要怎么回答,不做过深的探索,有兴趣的同学可以自行研究一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容