启动优化实践

1.ViewStub的使用

官方解释:A ViewStub is an invisible, zero-sized View that can be used to lazily inflate layout resources at runtime.

一个activity的布局里面有很多的view,但往往并不是全部都会展现给用户的UI,很多的浮层或组件,都是在特定情况下才需要展示给用户的。之前的方式,时全部的UI元素,统统在布局文件写出来,在oncreateView的时候将所有的元素都初始化,但当前不需要展示的view设置成gone,对用户不可见。

这样固然可以满足功能需求,但对于启动性能却是很不利的,因为设置成gone的view,还是需要inflate,需要实例化,因而会耗费页面初始化的时间和内存。因此将不需要显示的view用viewstub占位,在需要显示的地方在去inflate和显示。

2. 延迟初始化

很多的组件,并不是进入页面立即需要用到的,而是在特定情况下或用户唤起才会使用到。那么这些的初始化就可以延后,在需要用到的时候再进行初始化,以实现资源和cpu的按需分配和使用,减小启动耗时。

3. 布局优化

3.1 include/merge 标签

在业务开发中,有很多view是可以共用的,这些共用的组件可以使用inclue标签,实现view的复用,既优化了代码的清晰度,又减小了开发成本。

但include的使用可能引起布局层级加深的问题,可以用merge标签,让系统删除没有必要的层级嵌套。

3.2 冗余组件清理

布局基本一致,但又有微小的差别可以使用同一个组件实现。如果分别些组件,自然加大了布局初始化和渲染的成本,因此可以组合成一个组件使用。

另外在业务迭代的过程中,因为视觉的变化,组件的布局也在变化,这个过程往往容易产生一些冗余的垃圾组件,需要随时关注和清理,避免无用的组件损耗用户使用app的性能。

3.3 布局层级缩减

有时候,本来是一个非常简单的布局,却 嵌套了多级RelativeLayout 和多级 LinearLayout !这种看起来很低级的错误,往往发生在业务迭代的过程中,发现了立即精简布局吧。

另外,对于简单布局,LinearLayout 和FrameLayout的性能优于RelativeLayout,但是RelativeLayout可以实现相对布局,因此,若是需要2级以上LinearLayout嵌套才能实现的布局,1级 的RelativeLayout 去实现更好。

4. 线程优化

在activity启动过程中,非常耗时又不是绝对重要的操作,应该在非主线程执行,否则阻塞主线程,导致启动变慢;

绝对重要又一般耗时的操作应该放在主线程,如页面中决定整个页面初始化信息获取的网络请求,因为整个页面的渲染和信息展现都依赖于这个请求的结果,若请求的结果迟迟不回来,页面开启也没办法快。

常见的耗时操作:

(1)Service化的业务 getService方法

(2) 网络请求的构造和请求耗时

(3)文件读写操作

(4)遍历查找操作 等等

5.方法执行效率的优化

注意方法的执行效率,比如查找匹配的算法,不同的算法耗费的cpu资源都会不一样

6. 缓存

同样的信息,又很多地方都需要使用,这时候每个地方各自请求和处理吗? 这必定是一种浪费,对于需要用到的信息,提前请求缓存下来,需要用到的时候便可以直接提取,自然就节约了cpu资源。

7. 工具

整个优化主要采用trace view工具测试和发现耗时问题,找到耗时点之后一一攻破。

traceview真的很强大,关于这个工具的使用可参考:http://bxbxbai.github.io/2014/10/25/use-trace-view/

androidstudio 3.0之后ddms的入口没了,新的方式参考这个:https://developer.android.google.cn/studio/profile/monitor.html

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

推荐阅读更多精彩内容