第一种方法我们可以通过在Android Studio中的logcat日志界面查看,输入搜索关键字displayed,然后过滤条件选择No Filters,我们在启动应用时就会打印如下所示日志,代表启动耗时887毫秒;
2021-03-27 15:55:56.648 524-551/system_process I/ActivityTaskManager: Displayed com.xiangxue.arch_demo/.MainActivity: +887ms
方法二
第二种方法我们可以在cmd命令行中通过命令查看,如下命令;
adb shell am start -S -W [packageName]/[activityName]
输出结果如下所示,其中TotalTime就是耗时时间;
C:\Users\29155>adb shell am start -S -W com.xiangxue.arch_demo/.MainActivity
Stopping: com.xiangxue.arch_demo
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xiangxue.arch_demo/.MainActivity }
Status: ok
LaunchState: COLD
Activity: com.xiangxue.arch_demo/.MainActivity
TotalTime: 887
WaitTime: 890
Complete
3、启动速度分析
分析启动速度我们可以使用Android studio自带的profiler分析器;
- run – edit Configurations – profiling – start this
recording on startup前面打勾 - 主要有两种模式可以选择,sample java methods:间隔时间采样,每隔一定时间进行采样,分析相应方法的时间占用;trace java method:方法调用跟踪,会跟踪调用每个方法,然后记录每个方法的耗时,这种方式特别卡,并且也没有必要,一般使用第一种足以;
- 保存之后,我们以profile方式启动app,即可在profiler界面查看启动耗时相关信息;
- 在prfiler界面主要看三个模块来分析启动耗时
Top Down:方法的调用栈信息,我们可以通过分析方法调用栈过程中的各个方法的耗时时间,来确定是在那个过程中耗时较多; Flame Chat:又称火焰图,是以时间条的形式对方法的耗时进行记录,我们一般在这个图上总览一下各个方法的耗时,真正去分析时间还得去Top down中分析具体的方法; Bottom Up:也是方法的调用信息,不过跟Top Down正好相反,是从底部往顶部查找的,一般不看这个模块,查找不方便,看第一个方法调用栈就可以;
4、黑白屏问题
当我们点击app图标时,在应用还没有启动起来的时候会有白屏或者黑屏代替,这是google提供的界面加载方法,不过用户体验不好,我们可以通过设置背景图的方法解决;
我们首先定义style属性,将windowbackground属性设置为我们的背景图片;
然后在activity标签中修改theme属性,使用我们自定义的style标签;
最后我们要在activity的oncreate方法中settheme设置回应用的主题,因为启动了之后还是需要使用应用的主题的;
添加背景图片并不能对启动速度有优化,只是为了提高用户体验度;
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
、、、
}
二、卡顿分析
卡顿分析跟启动速度的分析的操作基本相同,也是使用Android studio自带的profiler分析器进行分析;
- 打开Profiler界面,保持应用运行在设备上或者模拟器上;
- 点击cpu运行模块进入cpu分析界面;
- 在Select CPU Profiling mode中选择Trace System Calls,并点击record;
在设备上或者模拟器上; - 点击cpu运行模块进入cpu分析界面;
- 在Select CPU Profiling mode中选择Trace System Calls,并点击record;