Android应用启动时间调优
来源:互联网 发布:淘宝店铺首页全屏装修 编辑:程序博客网 时间:2024/04/30 21:49
对于Android的性能这方面评估,大部分都是有超级兔子去比跑分的,还是不能反映全面的问题。就我知道的而言,应用启动时间是很影响用户体验的一个性能方面问题。
最近的一个项目,别人都说应用启动慢,我师傅看我没什么事,叫我看一下。以前也看过一次,但那次是当学习,只是看看整流程是怎么走的,这次确不一样了。开始的一天,按以前的方式再看了一下,感觉没有什么异常的地方,不过时间确实比对比机慢了很多,但不知道是时间是发哪块了。从InputReader到ViewRootImpl,从ViewRootImpl到Lanucher startActivity,从Launcher到ActivityManagerService把Activity显示出来,整个流程走了一遍,没有发现异常的地方,小郁闷了一下。
第二天想了一下,觉得不对,自己对比的方式有问题,没有把慢的手机跟对比机都进行相同的操作,导致知道时间慢了,也不知道慢在什么地方了,于是,两款手机我都只进电话界面,并且在两个手机上都打了LOG,发现慢的那款手机怎么都比好的那款手机慢200~300ms,我对比了一下整个时间,发现在AMS的scheduler到displayed Activity 时间特别长,确定那段时间是那这段了。
其实这段流程还有好多步骤,要把原来的Activity OnPause掉,压入Activity Stack,然后在新的Activity显示出来,整个Activity的生命周期都走了一遍,这让群我情何以堪呀!没招,只好采用分的方式,继续打LOG。
历经了千难万险,最后终于发现在ActivityThread.java的 mInstrumentation.callActivityOnPause(r.activity)耗时最长,正常那款机型是不要时间的,而慢的那个手机,确要200~300ms,刚好是整个周期所慢下来的时间,是Lanucher在OnPause的时候慢下来了,在负责Lanucher同事问了下,最近Launcher改什么了,才发现,Launcher在OnPause的时候,做动态壁纸的同事,添加了截屏的代码,要截屏Lancher的Item,以便显示出来。
折腾了两三天,就得到了个这样的结果,幸亏把问题找出来了。做性能的都说,环境一定要一样,我也知道,可惜做起来未必会实行的,要不然第一天就不会白忙乎了!还有一点是重要的,原来二分法真的是那么的神,以前重来没发现过,这次自己是用了一下,效果相当不错呀!把有O(n)的问题变成O(lon)的,看来效率真的会提升很大!
最近对Android GUI很来劲,希望自己好好的学习,能弄明白,听说是Android最复杂的一块,管他呢,玩玩而已!
- Android应用启动时间调优
- Android 应用启动时间
- Android应用的启动时间
- 浅谈Android应用性能之启动时间
- 浅谈Android应用性能之启动时间
- android app应用启动时间监测
- Android应用或界面启动时间性能
- iOS应用启动时间
- [android]获取各应用的启动次数和运行时间
- [android]获取各应用的启动次数和运行时间
- Android 中如何计算 App应用的启动时间?
- 应用启动时间-性能测试
- 测量应用启动的时间
- 应用启动时间统计方法
- android 检测启动时间
- android启动时间
- Android应用启动另一个应用
- Android启动----splash应用?
- shell批量修改后缀方法(# %的用法)【转】
- 《乔布斯传》圈点(6)
- android项目打包成APK文件
- 第二周 任务七 判断S所指的字符串是否回文
- 使用传输表空间跨平台迁移数据库
- Android应用启动时间调优
- 能ping通外网和局域网,却不能上网
- 再学 GDI+ GDI+ 的颜色常量表
- Kesion cms 路径泄露漏洞
- WEB相对路径绝对路径理解
- IOS开发中一些重要提示笔记
- 在c语言中写TMin
- java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.L
- 传智博客JAVA基础第一天