Android 中如何计算 App 的启动时间?

论坛 期权论坛     
匿名小用户   2019-10-20 18:32   179   0
<p><br></p>
<p>原文链接:http://androidperformance.com/2015/12/31/How-to-calculation-android-app-lunch-time.html</p>
<p>文章作者:<a data-token="7bfe809dd7d8ea2b45d0f257118a6471" href="http://androidperformance.com/" rel="nofollow" style="border:0px;font-weight:bold;font-family:'Microsoft YaHei', '微软雅黑', arial, Helvetica, 'Hiragino Sans GB', '宋体', Tahoma, STHeiti;font-size:15px;vertical-align:baseline;color:rgb(163,210,163);" title="访问 Gracker 的个人博客">Gracker</a></p>
<p><br></p>
<p><br></p>
<p></p>
<h1 class="article-title">Android 中如何计算 App 的启动时间?</h1>
<div class="article-info article-info-post" style="border:none;font-family:'Microsoft YaHei', '微软雅黑', arial, Helvetica, 'Hiragino Sans GB', '宋体', Tahoma, STHeiti;font-size:16px;vertical-align:baseline;">
<div class="article-category tagcloud" style="border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline;">
</div>
</div>
<div class="article-entry" style="border:0px;font-family:'Microsoft YaHei', '微软雅黑', arial, Helvetica, 'Hiragino Sans GB', '宋体', Tahoma, STHeiti;font-size:16px;vertical-align:baseline;line-height:1.65em;">
<p style="border:0px;font-style:inherit;font-family:inherit;font-size:1em;vertical-align:baseline;">
<br></p>
<p style="border:0px;font-style:inherit;font-family:inherit;font-size:1em;vertical-align:baseline;">
之前有人在知乎提问:<a data-token="7eff58474430b87f8fd05e09546c96ab" href="https://www.zhihu.com/question/35487841/answer/63011462" rel="nofollow" style="border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline;text-decoration:none;color:rgb(37,143,184);">“怎么计算apk的启动时间?”</a>:</p>
<blockquote style="border-width:0px 0px 0px 4px;border-left-style:solid;font-style:inherit;font-family:inherit;vertical-align:baseline;">
<p style="border:0px;font-style:inherit;font-family:inherit;font-size:1em;vertical-align:baseline;">
利用python或者直接用adb命令怎么计算apk的启动时间呢?就是计算从点击图标到apk完全启动所花费的时间。比如,对游戏来说就是点击游戏图标到进入到登录界面的这段时间。<br>
已知的两种方法貌似可以获取,但是感觉结果不准确:一种是,adb shell am start -w packagename/activity,这个可以得到两个值,ThisTime和TotalTime,不知道两个有什么区别,而且与实际启动时间不匹配,两者相加都可能比实际启动时间小(测试游戏的时候差别更大);另外一种是通过adb logcat的方式,感觉获取的结果也与实际有差别。</p>
</blockquote>
<p style="border:0px;font-style:inherit;font-family:inherit;font-size:1em;vertical-align:baseline;">
我和另外一个同事<a data-token="3cd21213c198e2a6f01191d80f12503c" href="https://www.zhihu.com/people/guo-qi-fa" rel="nofollow" style="border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline;text-decoration:none;color:rgb(37,143,184);">郭启发</a>针对两个方面进行了回答,不过毕竟知乎上看的人会比较少,所以我在征得他的同意之后,将这两个答案整理了一下,记录到博客中,一来算是一个小的总结,之后自己看得时候比较方便,二来给需要的同学一个更加方便的途径。</p>
<a id="more" style="border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline;color:rgb(37,143,184);"></a>
<h1 id="1_应用启动场景" style="border:0px;font-weight:inherit;font-style:inherit;font-family:inherit;font-size:1.5em;vertical-align:baseline;">
1 应用启动场景</h1>
<p style="border:0px;font-style:inherit;font-family:inherit;font-size:1em;vertical-align:baseline;">
事实上 Android 中一个 App 的启动时间可以准确计算的.但是要分场景.也就是说要分开游戏和应用. 大家都知道,在Android中,游戏开发和应用开发是两码事.所以我们需要分开来说.</p>
<h2 id="1-1_应用启动" style="border-width:0px 0px 1px;border-bottom-style:solid;border-bottom-color:rgb(221,221,221);font-style:inherit;font-family:inherit;font-size:1.3em;vertical-align:baseline;color:rgb(153,204,153);text-align:center;">
1.1 应用启动</h2>
<p style="border:0px;font-style:inherit;font-family:inherit;font-size:1em;vertical-align:baseline;">
我们平时在写应用的时候,一般会指定一个 mainActivity ,用户在桌面上点击这个 Activity 的时候,系统会直接起这个 Activity. 我们知道 Activity 在启动的时候会走 onCreate/onStart/onResume .这几个回调函数.</p>
<p style="border:0px;font-style:inherit;font-family:inherit;font-size:1em;vertical-align:baseline;">
许多书里讲过,当执行完 onResume 函数之后,应用就显示出来了…其实这是一种不准确的说法,因为从系统层面来看,一个 Activity 走完 onCreate/onStart/onResume 这几个生命周期之后,只是完成了应用自身的一些配置,比如 window 的一些属性的设置/ View 树的建立(只是建立,并没有显示,也就是说只是调用了 inflate 而已) . 后面 ViewRootImpl 还会调用两次performTraversals ,初始化 Egl 以及 measure/layout/draw.
等.<br>
所以我们定义一个 Android 应用的启动时间, 肯定不能在 Activity 的回调函数上下手.而是以用户在手机屏幕上看到你在 onCreate 的 setContentView 中设置的 layout 完全显示为准,也就是我们常说的应用第一帧.</p>
<p style="bor
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:50
帖子:1079
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP