搜搜吧

查看: 6|回复: 0

[资讯] 提升你的App启动速度的那些理论基础[含4P]

[复制链接]
  • TA的每日心情

    7 小时前
  • 签到天数: 452 天

    [LV.9]以坛为家II

    研究生

    8235

    主题

    8706

    帖子

    2万

    积分

    Rank: 8Rank: 8

    UID
    15343
    威望
    -463
    贡献
    5183
    在线时间
    168 小时
    注册时间
    2015-10-12
    发表于 7 天前 | 显示全部楼层 |阅读模式
    推广者专属福利,新客户无门槛领取总价值高达2775元代金券,每种代金券限量500张,先到先得。

    1, 欲善其事, 先利其器

    论语有云: 工欲善其事,必先利其器. 要想提升App的启动速度, 我们需要先找到拖后腿的点, 要想找到这些点, 我们就需要借助我们的工具了。

    前文提到了很多工具, 今天我们使用Traceview来分析我们的启动过程。

    1.1 Traceview介绍

    Traceview是一个性能分析工具, 主要是分析当前线程情况, 各个方法执行时间等。如下:

    df5fc575177180368b713e30050d3366.jpg-wh_651x-s_1736776339.jpg

    指标说明:

    Incl(Inclusive) Cpu Time

    方法本身和其调用的所有子方法占用CPU时间.

    Excl(Exclusive) Cpu Time

    方法本身占用CPU时间。

    Incl Real Time

    方法(包含子方法)开始到结束用时。

    Excl Real Time

    方法本身开始到结束用时。

    Call + Recursion Calls/Total

    方法被调用次数 + 方法被递归调用次数。

    Cpu Time/Call

    方法调用一次占用CPU时间。

    Real Time/Call

    方法调用一次实际执行时间。

    一般来说, 我们使用Real Time/Call排序来找出耗时多的方法

    有必要解释下CPU Time和Real Time:

    • CPU Time 方法实际执行时间(不包括io等待时间)
    • Real Time 方法开始结束时间差(包括等待时间)

    参考:http://stackoverflow.com/questions/15760447/what-is-the-meaning-of-incl-cpu-time-excl-cpu-time-incl-real-cpu-time-excl-re/17902682#17902682

    1.2 Traceview使用

    有两种方式来使用Traceview:

    a, 通过DDMS:

    df1ab31c05e4016e812eeb763c5ff4a0.jpg

    点击开始时会弹出一个选择trace模式的框, 默认选中”Sample based profiling”即可:

    538d0e8940eef2338da48d194f89919f.jpg

    Sample based profiling(基于样本分析)

    根据采样时间间隔来规律的打断VM来记录方法调用栈(Call Stack), 开销和采样频率成比例。

    Trace based profiling(基于完整trace数据分析)

    记录每个方法的出入口, 每个方法执行时都开启记录, 无论多小的方法, 因此开销很大。

    b, 使用代码:

    • // 在自己想要开始调试的地方start
    • Debug.startMethodTracing("GithubApp");
    • // 在合适的地方stop
    • Debug.stopMethodTracing();

    注: 以上方法开启trace的方式相当于”Trace based profiling”, 会记录每个方法的执行. Android 4.4及以上可以调用startMethodTracingSampling()来用代码开启”Sample based profiling”的trace方式。

    2, App启动流程分析

    • 要想优化App启动流程, 必先了解其启动过程。
    • 具体过程请参看这篇译文: Android Application启动流程分析。

    3, App启动方式

    通常来说, 一个App启动也会分如下三中不同的状态:

    冷启动

    • App没有启动过或App进程被killed, 系统中不存在该App进程, 此时启动App即为冷启动。
    • 冷启动的流程即为第2节所描述的App启动流程的全过程, 需要创建App进程, 加载相关资源, 启动Main Thread, 初始化首屏Activity等。
    • 在这个过程中, 屏幕会显示一个空白的窗口(颜色基于主题), 直至首屏Activity完全启动。

    下图展示了冷启动的时间线:

    df550e7b43e6fec25b818f33ebf9fa0b.jpg

    热启动

    • 热启动意味着你的App进程只是处于后台, 系统只是将其从后台带到前台, 展示给用户。
    • 类同与冷启动, 在这个过程中, 屏幕会显示一个空白的窗口(颜色基于主题), 直至activity渲染完毕。

    温启动

    介于冷启动和热启动之间, 一般来说在以下两种情况下发生:

    • 用户back退出了App, 然后又启动. App进程可能还在运行, 但是activity需要重建。
    • 用户退出App后, 系统可能由于内存原因将App杀死, 进程和activity都需要重启, 但是可以在onCreate中将被动杀死锁保存的状态(saved instance state)恢复。

    通过三种启动状态的相关描述, 可以看出我们要做的启动优化其实就是针对冷启动. 热启动和温启动都相对较快。

    4, 哪些地方是App快速启动的敌人

    根据冷启动的时间图, 可以看出, 对于App来说, 我们可以控制的启动时间线的点无外乎:

    • Application的onCreate
    • 首屏Activity的渲染

    而我们现在的App动不动集成了很多第三方服务, 启动时需要检查广告, 注册状态等等一系列接口都是在Application的onCreate或是首屏的onCreate中做的。

    • 很多第三方平台的SDK文档也都是这么建议的。

    5, 结语

    明白了App的启动原理, 也知道了App启动过程中哪些地方容易阻塞, 还知道了用什么工具来分析每个方法的执行时间, 那么接下来就很容易做了。


    楼主热帖排行榜
    搜搜吧社区温馨提示:
    搜搜吧(www.sosoba.org)十分重视网络版权及其他知识产权的保护,针对网络侵权采取如下版权政策:
    1、本站有理由相信网友侵犯任何人的版权或作品,(图文,文字,下载,视频,非法传播),本站有权不事先通知即删除涉嫌侵权的作品和内容!
    2、本站将采取必要的网络技术手段,确认为侵权作品或内容的用户有权进行警告、屏蔽、删除的行为,尽可能的防止侵权行为的发生!
    3、如若您的作品或内容在搜搜吧被侵权,请及时联系我们并提供能证明版权所有的物品,我们将及时进行处理,给您造成不便,敬请谅解!
    4、搜搜吧删帖,投诉,举报,侵权,账号解封唯一指定快速受理频道,请直接发送邮件到 kefu-sosoba@qq.com 一个工作日内核实并邮件通知立即删除
    soso搜搜吧社区是聚合百度搜索,搜狗搜索,360搜索,新闻,教育,站长,广告,娱乐,影视,微信,网盘,营销,手机,汽车,游戏,论坛综合为一体的大型门户社区www.sosoba.org
    Powered by www.sosoba.org X3.4© 2013-2019 搜搜吧社区 小黑屋|手机版|地图|关于我们|新闻资讯|soso搜搜吧社区官网
    搜搜吧社区官网创建于2013年07月23日,本站内容均为会员发表,并不代搜搜吧社区立场,请遵守当地相关法律,客服邮箱: kefu-sosoba@qq.com
    本站所有的内容均来自互联网以及第三方作者自由发布、本站soso搜搜吧不承担任何的法律责任、若有侵权请来信告知,我们在收到举报后的一个工作日内立即删除
    推荐使用:chrmoe谷歌浏览器,搜狗浏览器,QQ浏览器,360极速浏览器,360安全浏览器,猎豹浏览器,火狐浏览器,世界之窗,百度浏览器,Safari浏览器,ios,Android

    GMT+8, 2018-11-15 20:25 , Processed in 1.125000 second(s), 30 queries , Gzip On.

    快速回复 返回顶部 返回列表