赞
踩
前言:我们的App项目一般都会有application类,而且我们一把都会在这个类中做很多程序的初始化操作,比如:推送初始化,网络请求Okhttp等等,这些一般我们都会写在这个类中,但是如果我们在这个类中执行较多的初始化操作时,无形之中就加重了App启动时间,让我们的App启动时间延长,那我们就要分析这里面哪一个耗时最长呢?今天我们来做个分析。
1、添加代码:
首先在application的onCreate方法中所有要运行初始化或者其它逻辑代码之前加上以下代码:
- File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
- Log.i(TAG, "onCreate: " + file.getAbsolutePath());
- //把分析结果存在一个文件
- Debug.startMethodTracing(file.getAbsolutePath());
看我写的位置:
接着在所有初始化逻辑代码之后,加上如下代码:
Debug.stopMethodTracing();
加上之后,接着插上手机,运行项目,查看Logcat中的打印日志,找到我们打印的上面创建的File文件路径,复制地址
2、打开电脑的命令黑窗口 cmd
先执行命令: cd desktop ,让当前位置桌面路径下,旨在让文件一会存在桌面上容易找到。
在执行以下命令 : adb pull + 复制的文件路径地址,
然后回车执行,运行完后,会在桌面上生成一个app1.trace 的文件, 这个时候,我们把此文件拖到android Studio项目中打开,
就能看到如下界面:
不知道大家能不能看明白上图界面是什么意思?从图中可以看到很多颜色的条形,条形上还有字,他们就是你在加上最开始的那两段代码中间的那些初始化等代码的运行时间,我们用鼠标拖动下图 中 1 、 2 位置,可以看到下面 3 箭头的东西会发左右 拉伸,
下面 3 的部分就是我们初始化部分所有的代码运行时间分析,
请看我下图中红色框起来的三个部分,分别代表我代码中三个模块代码执行的事件长度,
可以看到整个长度代表这个初始化模块的所需时间,而我们第一个红色框就是我极光推送所占的执行时间,第二个框是我okhttp初始化所用的时间,后面是其它的,一眼能看出来在这里执行供花费了较长时间,我们可以针对这种情况进行进一步优化,让application 能优化缩短它的启动时长。比如我们可以把一些耗时代码放到一个线程中,不过要放在线程中时,必须你的这个初始化代码不能包含 handler , 没有操作UI,才行,或者使用懒加载,一些暂时用不到的可以等到使用时在初始化等。
好了,今天就简单介绍到这了,这是分析,至于更好的优化还看你怎么处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。