android启动时间慢的问题

【转】对于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最复杂的一块,管他呢,玩玩而已!

onCreate  onStart onPause  需要去分析到底是在哪个生命周期中花掉了最多的时间

时间: 2025-01-23 06:54:22

android启动时间慢的问题的相关文章

两年半开发经验,从360离职后,拿到钉钉、抖音、小红书、美团等8家公司的offer

前言 去年年底,我提交了从360提交了辞呈.原因很简单,公司业绩不行了! 我们公司2019年的及格线是38亿元,但是上半年仅仅完成了16.09亿元. 屋漏偏逢连夜雨,王思聪玩砸了的熊猫直播,我们360也算是个大股东,持股近20%.熊猫直播破产,360保守估计要损失5个亿. 今年年初面试了以下几个公司(不是面试顺序): 阿里(钉钉):拿到 offer 头条(抖音.火山):拿到 offer 美团(美团平台):拿到 offer 腾讯(腾讯音乐):二面挂 小红书:拿到 offer bilibili:拿到

Android内核开发:如何统计系统的启动时间

本文是<Android内核开发>系列的第七篇文章,通过上一篇文章<Android内核开发:图解Android系统的启动过程>我们大致了解了Android系统的启动过程,那么本文就从实践的角度,简单介绍一下如何统计Android系统的启动时间. 这里所说的统计系统的启动时间,并不是简单地用秒表和肉眼来统计,而是通过分析系统输出的log信息来统计,这样才显得更加专业. 首先了解2个概念: (1) Android是基于Linux内核的系统,因此Android的启动过程是分为两个阶段的,第

Android应用启动时间及启动日志获取方法

1. Android应用中,可以使用如下方式进行应用启动时间的查看 2. 启动日志获取方法:

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

(转载) 已知的两种方法貌似可以获取,但是感觉结果不准确:一种是,adb shell am start -w packagename/activity,这个可以得到两个值,ThisTime和TotalTime,不知道两个有什么区别,而且与实际启动时间不匹配,两者相加都可能比实际启动时间小(测试游戏的时候差别更大):另外一种是通过adb logcat的方式,感觉获取的结果也与实际有差别 1 应用启动场景 事实上 Android 中一个 App 的启动时间可以准确计算的.但是要分场景.也就是说要分开

Android优化App启动时间

原文地址:https://developer.android.com/topic/performance/vitals/launch-time 用户希望App能够快速相应和加载,应用启动缓慢会带来糟糕的用户体验,导致用户恶评,甚至会卸载你的应用. 这篇文章提供的信息能够帮助你优化应用的启动时间.首先,我们先来了解应用启动的内部原理,接下来,我们会讨论如何分析启动性能.最后,最后我们会介绍一些影响启动性能的常见问题,并会给出相应的解决办法. 应用启动原理 应用启动可以分为三种类型,冷启动,暖启动,

Android计算app启动时间之二

采用一中的方法计算启动时间,输入adb shell am start -W apk/apk.MainActivity 会报没有权限的错误,google了下,要修改某些东西,懒的改了. 现在来讲下第二种方法,我们可以直接查看日志:如图: 当然有的app首次安装启动会停在引导页,有的app未登录会停在登录界面,这些也可以通过日志查看启动时间.

Android首次启动时间长优化之预编译提取Odex

提示!应用程序的安装有两种情况,第一:首次启动系统时安装:第二:系统启动完成后安装.本篇博文基于第一种安装场景.在系统首次启动的场景中,系统会对/system/app./system/priv-app./data/app目录下的所有APK进行dex字节码到本地机器码的翻译,同样也会对/system/framework目录下的APK或者JAR文件,以及这些APK所引用的外部JAR,进行dex字节码到本地机器码的翻译.这样可以保证除了应用之外,系统中使用Java来开发的系统服务,也会统一地从dex字

Android UsageStats:应用根据启动次数、启动时间、应用名称排序

Android 7.1.1 developers/samples/android/system/AppUsageStatistics/Application/src/main/java/com/example/android/appusagestatistics/AppUsageStatisticsFragment.java packages/apps/Settings/src/com/android/settings/UsageStatsActivity.java /** * Copyrigh

APP性能(Android手机):APP启动时间

1    APP性能测试 1.1       启动时间 1.1.1     执行 1.1.2     策略 1.1.3     工具adb 连接模拟器:adb connect 127.0.0.1:62001 步骤 先存储日志,然后访问app,待完全显示后,退出日志保存,找到日志并查看. 1.1.4     结果 Displayed过滤 再跟开发要activity名称,最后把它们相加,就是总启动时间. 启动时间同网络有关,建议测试5~10次,超过5秒请开发排查问题. 原文地址:https://ww