方法一
第一种方法我们可以通过在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;
- 然后在设备上操作我们应用想要分析的界面,操作完成后点击stop;
- 此时会自动生成SystemTraceRecording界面;
我们可以在生成的界面上进行分析,界面显示了许多有用的信息,比如每一帧的消耗时间,如果时间过长会变红,并且在下面时间条显示具体方法名;
我们还可以在右边的Top down界面查看具体方法调用栈信息;跟启动速度优化的右侧界面相同;
三、布局分析
布局方面的优化主要可以从三个方面进行分析;
1、层级优化
framework层在对布局进行measure、layout和draw操作时是一层一层布局递归调用的,因此我们的布局层次结构越深,则耗时越久,我们应该尽量减少布局层级,扁平化处理布局;
尾声
如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
这里,笔者分享一份从架构哲学的层面来剖析的视频及资料给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
Android进阶学习资料库
一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!
大厂面试真题
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《2019-2021字节跳动Android面试历年真题解析》
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
**
[外链图片转存中…(img-CUppouEf-1714643948749)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!