一、查看启动时间
第一种方式:直接在Logcat中查看,Android应用启动的时候会打印出app的启动时间,不过要在过滤框中输入
Displayed 来过滤查看:
第二种方式: 使用 adb 命令,这里不详解 adb,有疑问的可以自行谷歌
二、优化启动时间
怎么优化?
我们都知道APP的启动是靠系统进程来调用ActivityThread中的main方法来启动Application,在这过程中,我们是无法进行操作的,然后启动Application之后调用其中的onCreate方法,再加载系统资源、主题、获取到启动页面的xml文件进行解析显示。
所以,在这个过程中,我们能操作的是Application中的onCreate方法,看下我运行的demo中对application做了什么操作?
/**
* @author Ellison
* @date 2018/7/24
* @desc 用一句话描述这个类的作用
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ARouter.openDebug();
ARouter.openLog();
ARouter.init(this);
}
}
在我的Application中,我只简单的调用了路由框架ARouter的初始化工作,下面我们看看它操作的耗时时间:
(查看方法耗时时间,需要使用到Debug中的两个方法 startMethodTracing(file) 和 stopMethodTracing)
File file = new File(Environment.getExternalStorageDirectory(), "app");
Log.d("Debug ====", file.getAbsolutePath());
Debug.startMethodTracing(file.getAbsolutePath());
ARouter.openDebug();
ARouter.openLog();
ARouter.init(this);
Debug.stopMethodTracing();
重新运行APP(因为是自己debug,权限需要自己控制),在
查看trace跟踪下来的数据,并从sdcard中导出来:
三、Trace文件分析
将上一步中的app.trace文件直接拖动到Android Studio,将看到这样的效果:
上面黄色条就是onCreate方法中,每一个语句执行的耗时时间,可以将其放大查看,也可以查看下面Thread main中耗时,我们可以清楚的看到 ARouter.init() 方法,耗时占用整个方法的98.8%,所以这里我们可以优化!
因为ARouter是路由跳转,而我们APP一般都有启动闪屏页面,在闪屏页面无需路由,在APP启动的时候直接加载显示,所以,我们可以将路由框架的初始化直接放到闪屏页面进行,最后我们看下App的启动时间:
对比优化前的启动时间 1s40ms,我们启动时间还是有进步的!
另外,尽量不要在Application中做其他耗时的操作,一些没必要的初始化,可以延时加载或者直接放到闪屏页面处理!