Android性能分析与优化笔记 - 3 启动时间优化

源码地址:https://github.com/codeguyFred/MyPerformance
https://github.com/codeguyFred/MyPerformance/tree/master/app/src/main/java/com/optimize/performance/launchstarter

3-2启动优化介绍

App startup time

  • 冷启动
    Android性能分析与优化笔记 - 3 启动时间优化_第1张图片
  • 温启动
    Android性能分析与优化笔记 - 3 启动时间优化_第2张图片
  • 热启动
    Android性能分析与优化笔记 - 3 启动时间优化_第3张图片

3-3 启动时间测量方式

adb shell am start -W 包名/首屏Activity
Android性能分析与优化笔记 - 3 启动时间优化_第4张图片Android性能分析与优化笔记 - 3 启动时间优化_第5张图片
Android性能分析与优化笔记 - 3 启动时间优化_第6张图片
监听View首帧绘制
Android性能分析与优化笔记 - 3 启动时间优化_第7张图片
Android性能分析与优化笔记 - 3 启动时间优化_第8张图片
Android性能分析与优化笔记 - 3 启动时间优化_第9张图片Android性能分析与优化笔记 - 3 启动时间优化_第10张图片
Android性能分析与优化笔记 - 3 启动时间优化_第11张图片

3-4 启动工具选择

Android性能分析与优化笔记 - 3 启动时间优化_第12张图片
会带偏
Android性能分析与优化笔记 - 3 启动时间优化_第13张图片
Android性能分析与优化笔记 - 3 启动时间优化_第14张图片
Android性能分析与优化笔记 - 3 启动时间优化_第15张图片
Android性能分析与优化笔记 - 3 启动时间优化_第16张图片
Android性能分析与优化笔记 - 3 启动时间优化_第17张图片
Android性能分析与优化笔记 - 3 启动时间优化_第18张图片
Android性能分析与优化笔记 - 3 启动时间优化_第19张图片

3-5~3-7 aop切面统计方法消耗事时间Android性能分析与优化笔记 - 3 启动时间优化_第20张图片

3-8异步优化

    private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));
    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
    ···
     ExecutorService service= Executors.newFixedThreadPool(MAXIMUM_POOL_SIZE);
        service.submit(new Runnable() {
            @Override
            public void run() {
                
            }
        });
有些不满足异步优化的条件可以通过计数,延迟Application onCreate的执行完毕,在需要计数的地方调用countDownLatch.countDown();在最末尾的地方调用countDownLatch.await();等待计数一样后才不等待

CountDownLatch countDownLatch=new CountDownLatch(1);
countDownLatch.countDown();
countDownLatch.await();

Android性能分析与优化笔记 - 3 启动时间优化_第21张图片
Android性能分析与优化笔记 - 3 启动时间优化_第22张图片

3-9~3-10 异步初始化最优解(对常规方法的优化)

Android性能分析与优化笔记 - 3 启动时间优化_第23张图片Android性能分析与优化笔记 - 3 启动时间优化_第24张图片
https://github.com/codeguyFred/MyPerformance/blob/master/app/src/main/java/com/optimize/performance/launchstarter/TaskDispatcher.java
通过树的排序确定初始化任务的执行顺序
https://github.com/codeguyFred/MyPerformance/blob/master/app/src/main/java/com/optimize/performance/launchstarter/sort/TaskSortUtil.java

主线程执行的taskAndroid性能分析与优化笔记 - 3 启动时间优化_第25张图片
异步的task
初始化
Android性能分析与优化笔记 - 3 启动时间优化_第26张图片

  • dispatcher.await 需要等待task完成才执行完onCreate,task需要重写needWait方法来声明
  • task重写dependOn方法,依赖于某个任务的初始化,比如极光推送初始化需要先获取设备id
    Android性能分析与优化笔记 - 3 启动时间优化_第27张图片

你可能感兴趣的:(android)