android 统计启动时长,标准
一.启动的类型
冷启 动,application没有被创建,需要先创建进程,然后启动MainActivity。由于这个过程需要fork一个新进程,所以耗时。
热启动,同上面对照,已经启动过application,并驻留在系统内存内,只是需要唤醒该进程,并启动MainActivity。
二:统计启动时间
1.物理统计
通过高速相机,从点击launcher上面的图标开始,到MainActivity的第一个可见帧,算作启动时间。
2.adb 统计
adb shell am start -w pageage/activityname 通过这条命令启动,可以获得启动时间。
$ adb shell am start -W com.abc.test/com.abc.test.MainActivity
Starting: Intent { act=android.intent.action.MAIN cat=
Status: ok
Activity: com.speed.test/.HomeActivity
ThisTime: 496
TotalTime: 496
WaitTime: 503
Complete
3.线上版本统计
如果是在线上版本,无法使用命令统计,我们分析下,所谓冷启动,就是创建applicaiton开始,一直到MainActivity第一个可视画面。
applicaiton 创建,可以从attachBaseContext()开始,得到startTime。MainActivity的第一个可视画面,onResume其实还没有看到画面,最合适的回调是onWindowFocusChanged,也就是获得焦点。
但是这个回调需要做适当的过滤,就能获得endTime。
所以冷启动就是两个时间差。热启动的startTime 就是MainActivity的onRestart。
如果获取onWindowFocusChanged 的时间,需要结合MainActivity的整个生命周期。
这里有2个关键点,activity的启动流程 & applicaiton到activity的生命周期。
activity启动流程:
从launcher点击应用图标,launcher调用startactivity,
通过binder机制可以理解,所有的服务最终都会通过AMS。
AMS首先会通过zygote fork出进程。进程启动后准备好looper & 消息队列。然后调用 attach 方法将应用进程绑定到 ActivityManagerService,然后进入 loop 循环,不断地读取消息队列里的消息,并分发消息。
AMS保存进程的代理对象,然后AMS通过该进程,创建activity的实例& 执行各生命周期。
所以整个冷启动的流程如下:
-> Application 构造函数
-> Application.attachBaseContext()
-> Application.onCreate()
-> Activity 构造函数
-> Activity.setTheme()
-> Activity.onCreate()
-> Activity.onStart
-> Activity.onResume
-> Activity.onAttachedToWindow
-> Activity.onWindowFocusChanged
android 统计启动时长,标准的更多相关文章
- 【Android端 APP 启动时长获取】启动时长获取方案及具体实施
一.什么是启动时长? 1.启动时长一般包括三种场景,分别是:新装包的首次启动时长,冷启动时长.热启动时长 冷启动 和 热启动 : (1)冷启动:当启动应用时,后台没有该程序的进程,此时启动的话系统会分 ...
- 设置Android Studio启动时可选最近打开过的工程
Android Studio启动时,默认会打开最近关闭的工程. 如果想Android Studio在启动时,打开欢迎界面(Welcome to Android Studio界面),则可以通过设置Set ...
- bash 统计在线时长最长的十个玩/统计一天内一直处于不活跃状态的玩家的百分比
1.某游戏的客户端每隔5分钟会向服务端报告一次玩家的账户积分,如果两次报告的时间间隔不大于5分钟,认为该玩家在这5分钟内在线,假设报告数据的格式如下: IP Dat ...
- 如何取消android studio启动时自动打开上次关闭的项目
Androidstudio默认每次android studio启动就会自动打开上次关闭的项目,如果想要取消并让它显示此界面 只需要
- Android Studio启动时出现unable to access android sdk add-on list
目录 Android Studio First Run 检测 Android SDK 及更新,由于众所周知的原因,我们会「Unable to access Android SDK add-on lis ...
- [转]Android Studio启动时出现unable to access android sdk add-on list
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50563122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...
- 设置android studio启动时不检查sdk Android studio启动时总是在找AndroidSDK的解决办法
安装完android studio后,首次启动会弹出检查sdk组件等设置,点击finish会去下载sdk等,如果没有设置代理的情况下,这个界面会卡很久.截图如下: blog0826-1.png 所以, ...
- Android studio 启动时出现Android studio was unable to create a local connection in order
在进入后adb无法连接,并且报错 Internal HTTP server disabled: Cannot start internal HTTP server. Git …… 各种百度没有答案,最 ...
- Android Studio启动时Fetching android sdk component information超时的解决方案
1)进入刚安装的Android Studio目录下的bin目录.找到idea.properties文件,用文本编辑器打开. 2)在idea.properties文件末尾添加一行: disable.an ...
随机推荐
- 201521123007《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 作业参考文件下载 1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.jav ...
- 201521123071 《JAVA程序设计》第四周学习总结
1. 本周学习总结 1.1 1.2 在本周的学习中,主要学习了以下几点: 注释的应用,并能在Eclipse中查看 继承的基本定义,关键字super的用法,覆盖与重载 多态与is-a,instanceo ...
- 201521123114 《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 Q1. 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用syn ...
- 201521123023《Java程序设计》第14周学习总结
1. 本周学习总结 (1)ResultSet.Statement.Connection使用完后最好立刻关闭,并且按照ResultSet.Statement.Connection的顺序依次关闭. (2) ...
- Java:final、static关键字 详解+两者结合使用
一 final关键字 1) 关于final的重要知识点 final关键字可以用于成员变量.本地变量.方法以及类. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误. ...
- Project Euler:99 Largest exponential C++
Comparing two numbers written in index form like 211 and 37 is not difficult, as any calculator woul ...
- IDEA配置Tomcat
如何用IDEA写Servlet在我别的博文有! 注意:如果不能成功启动Tomcat,很有可能是JDK版本和Tomcat版本不匹配,此时你可以降低JDK版本试试
- Struts2第九篇【OGNL、valueStack详解】
什么是OGNL表达式? OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式. Struts2框架使用OGNL作为默认的表达式语言. 为什么我们学 ...
- Activiti-04-.Spring integration
ProcessEngineFactoryBean <beanid="processEngineConfiguration"class="org.activiti.s ...
- 【机器学习实战】Machine Learning in Action 代码 视频 项目案例
MachineLearning 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 Machine Learning in Action (机器学习实战) | ApacheCN(apa ...