Android App启动优化

开机启动流程

在这里插入图片描述

冷/热/暖启动

冷启动

程序从头开始,系统没有为该程序创建进程。一般厂家:程序安装后的第一次启动; 应用程序被系统完全终止后再打开

热启动

此时程序仍然主流在内存中,只是被系统从后台带到前台,因此程序可以避免重复初始化,加载布局和渲染。

需要注意的是,如果程序的某些内存被系统清除,比如调用了onTrimMemory方法,则需要重新创建这些对象以响应热启动事件。

暖启动

它包含热启动和冷启动一系列的操作子集,比热启动的消耗稍微多一点。它于热启动最大区别在于,它必须通过调用onCreate方法开始重新创建活动,也可以传递给onCreate方法中保存的实例状态中获得某些对象的恢复。

黑白屏解决方案

启动App时,默认会先加载空白窗体 (一般为白色或黑色),我们可以通过修改Theme背景色为透明色,或者将背景改为闪屏页来解决。

详见 https://www.cnblogs.com/hwb04160011/p/8041429.html

App启动时间检测

adb shell am start -W com.ethanco.mytest0822/.MainActivity  

执行结果如下
在这里插入图片描述

ThisTime:最后一个Activity启动时间
TotalTime:一系列Activity启动时间
WaitTime:总启动时间,包含系统在冷启动时,需要加载App信息到内存的时间
一般,我们看TotalTime即可,WaitTime中的系统时间一般我们改变不了
TotalTime就是如果有多个页面,比如SplashActivity和MainActivity,那么都会统计进去

代码执行时间统计

	@Override
    public void onCreate() {
        super.onCreate();

        File file = new File(Environment.getExternalStorageDirectory(), "app.trace");
        Debug.startMethodTracing(file.getAbsolutePath());
        doSomeThing(); //业务逻辑代码
        test();
        Debug.stopMethodTracing();
    }

    private void doSomeThing() {
        SystemClock.sleep(2000);
        a();
        test();
    }

    private void a(){
        SystemClock.sleep(200);
    }

    private void test(){
        SystemClock.sleep(500);
    }

需要注意的是,App需要先申请存储权限,否则会错Unable to open trace file '/storage/emulated/0/app.trace错误

接着,我们运行程序后,通过adb pull /storage/emulated/0/app.trace,将文件导入到电脑中,接着将该文件,拖入Android Studio
在这里插入图片描述
可以看到,具体每个方法的耗时,这样,我们就可以根据耗时来定位启动慢的问题
,然后正对性的来优化启动速度,减少代码执行时间,能放到异步线程的尽量放到异步线程

其他

今日头条启动很快,你觉得可能是做了哪些优化?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值