一、查看启动时间

第一种方式:直接在Logcat中查看,Android应用启动的时候会打印出app的启动时间,不过要在过滤框中输入
    Displayed 来过滤查看:

android 减少启动时间 android 启动速度优化_启动时间

第二种方式: 使用 adb 命令,这里不详解 adb,有疑问的可以自行谷歌

android 减少启动时间 android 启动速度优化_闪屏_02

二、优化启动时间

怎么优化?

我们都知道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,权限需要自己控制),在

android 减少启动时间 android 启动速度优化_闪屏_03


查看trace跟踪下来的数据,并从sdcard中导出来:

android 减少启动时间 android 启动速度优化_ci_04

三、Trace文件分析

将上一步中的app.trace文件直接拖动到Android Studio,将看到这样的效果:

android 减少启动时间 android 启动速度优化_android 减少启动时间_05

上面黄色条就是onCreate方法中,每一个语句执行的耗时时间,可以将其放大查看,也可以查看下面Thread main中耗时,我们可以清楚的看到 ARouter.init() 方法,耗时占用整个方法的98.8%,所以这里我们可以优化!


因为ARouter是路由跳转,而我们APP一般都有启动闪屏页面,在闪屏页面无需路由,在APP启动的时候直接加载显示,所以,我们可以将路由框架的初始化直接放到闪屏页面进行,最后我们看下App的启动时间:

android 减少启动时间 android 启动速度优化_启动时间_06

对比优化前的启动时间 1s40ms,我们启动时间还是有进步的!
另外,尽量不要在Application中做其他耗时的操作,一些没必要的初始化,可以延时加载或者直接放到闪屏页面处理!