启动APP的代码优化

标签: android  android

启动APP时的问题

在构建App时, 经常需要引入一些第三方的SDK,而项目业务越多,引用的第三方也越多,有些第三方会要求在Application的onCreate方法中对其初始化。 这意味着在application的onCreate方法中执行时间会被拉长,首个Activity布局的渲染时间也会相应地拉长。
同理,如果我们在Activity的onCreate,onStart,onResume方法中执行的任务时间过长,同样也会导致布局被渲染的事件拉长。这样导致的问题就是用户会感觉页面迟迟没有加载出来,用户体验极差。

启动时间检测

adb shell am start -W xxx/.XXXActivity

// 运行结果
ThisTime:最后一个Activity的启动时间
TotalTime:一系列Activity的启动时间
WaitTime:总启动时间,包含系统在冷启动的时候,需要加载app信息到内存的时间(系统决定,对开发者来说是不可控的)
如下图所示,启动com.chat.room.MainActivity的耗时情况
在这里插入图片描述

代码执行时间统计

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        File file = new File(Environment.getExternalStorageDirectory(), "app.trace");
        Log.d(TAG, "onCreate: file.absolutePath =  " + file.getAbsolutePath());
        Debug.startMethodTracing(file.getAbsolutePath());
        init();
        Debug.stopMethodTracing();
    }
private void init(){
        a();
        b();
    }
    private void a(){
        new Thread(){
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }.start();
        b();
    }
    private void b(){

        new Thread(){
            @Override
            public void run() {
                try {
                    Thread.sleep(2500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }.start();
    }

在init方法开始之前,结束之后,分别调用Debug的方法。然后我们就会得到一个trace文件。通过命令adb pull /storage/emulated/0/app.trace 将trace下载到本地,然后通过AndroidStudio打开。将会是如下所示:
在这里插入图片描述
从图中我们可以看到每个方法的耗时时间。
在这里插入图片描述
也可以切换到“Top Down”模式,查看耗时最多的方法。

解决办法

方式一:可以放在子线程的工作,放在子线程处理。但是需要注意
子线程使用的API不能创建Handler
不能有UI操作
对异步要求不高。
方式二:懒加载
何时使用,何时初始化。

总结

代码优化的目的就是减少代码耗时时间,能放在子线程执行的放在子线程执行。或者通过懒加载的方式缓解初始化的压力。

原文链接:加载失败,请重新获取