- 确保设备连接到电脑;
- 启动cmd窗口
- 输入如下命令:
adb shell am start -W [app包名]/[launcherActivity的全类名]
在android29模拟器上的结果为:
vivo真机,那么结果是:
这里会出现3个time:
thisTime
:am start 命令可能会启动多个Activity,如果启动多个,thisTime
则是指 最后一个Activity的启动时间,如果启动的是1个,那么thisTime
等于TotalTime
.
TotalTime
:新的应用的Activity启动的耗时。
WaitTime
: AMS将当前Activity从onResume转向onPause,再启动新应用Activity的总时长,包含了TotalTime
在内,所以WaitTime
比TotalTime
要长。
当然你也可以加上-S -R 10 ,连续启动10次,然后自己计算平均启动时长。
adb shell am start -S -R 10 -W packagename/.MainActivity
这里的3个时间,我们大概可以看出自己的
app
启动具体花费了多少时间。通常启动时间可以通过肉眼观察得到,但是具体到确切数值,还是需要借助命令行的。那么接下来的问题,如果发现app
启动耗时不理想,比如非常极端的情况,我们在Activity的onCreate中加入了一些耗时操作,
或者你把耗时操作放到onResume中:
那么:这里就是启动时间就会整个拖慢4000MS.
上面的这是我在模拟UI线程中执行耗时操作的极端情况。在实际的项目中,可能这些拖慢Activity启动时间的一些耗时任务都是错综复杂的,这时候应该如何处理?
所有的启动任务按照两个维度分为四类:
必要
: 比如我们的launcher是WelcomeActivity
,它会自动结束,然后下一个是MainActivity
,如果是MainActivity
所必须的一些参数需要提前获取,那么这个获取这些参数的任务就是必要任务。
耗时
:按照消耗时间的长短做大致区分,不耗时,一般是微量计算,很快能执行完,不会耽误主线程太多时间。 耗时长的,一般是第三方SDK的初始化,或者执行网络请求。
这4
类分别有不同的处理方式:
- 必要且耗时
这种,第三方SDK初始化,比如Tinker
,需要在欢迎页面就知道要不要合并补丁包,这个是必须的,也是耗时的,或者 极光推送SDK初始化。类似这种,采用**异步线程
**去处理,此处建议直接new Thread
去执行,而不是在启动Activity里面就用线程池
,因为线程池的初始化也是要耗费时间的,还不如new Thread
去执行Runnable
.
异步执行的好处是,不会给UI线程带来时间上的延迟,给用户比较好的欢迎页面的体验。- 必要不耗时
这种,放在onCreate
或者onResume
里面无妨。- 不必要不耗时
针对这种不必要的,但是不耗时的,我们可以容忍它在启动Activity
,但是也还是放到new Thread
中去执行比较好,启动时间,能节省就节省。- 不必要且耗时
比如,数据上报的SDK初始化,下一个Activity
并不要求你一定要初始化完成。这个就不要放在启动Activity了。直接放在第一次数据上报的代码里去初始化即可。
另外,经验之谈:针对必要且耗时的任务,如果数量非常多,直接用一个线程去执行,但是启动页Activity同样会停留很久,这个时候,可以给所有任务区分一个轻重缓急
,在重要任务执行完毕之后,就进入下一个Activity,不必等待非重要任务的结果。(根据这个思路,相信各位大佬都能写出自己的实现代码,我就不多嘴了).
app
启动白屏优化
最后提一下, 有些情况下启动app
,会出现明显白屏
,然后再出现我们写的UI布局。 这是因为 AMS
在启动我们的Activity
的时候,会先显示一个默认白色的window
,然后再出现我们写的UI布局,如果因为我们自身app
的启动耗时过长,导致白屏时间太长,体验就非常不好。这种有两种解决方案:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**