源码地址:https://github.com/codeguyFred/MyPerformance
https://github.com/codeguyFred/MyPerformance/tree/master/app/src/main/java/com/optimize/performance/launchstarter
3-2启动优化介绍
- 冷启动
- 温启动
- 热启动
3-3 启动时间测量方式
adb shell am start -W 包名/首屏Activity
监听View首帧绘制
3-4 启动工具选择
会带偏
3-5~3-7 aop切面统计方法消耗事时间![在这里插入图片描述](https://img-blog.csdnimg.cn/20190630153326821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEyMDgzNzc=,size_16,color_FFFFFF,t_70)
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();
3-9~3-10 异步初始化最优解(对常规方法的优化)
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
主线程执行的task
异步的task
初始化
- dispatcher.await 需要等待task完成才执行完onCreate,task需要重写needWait方法来声明
- task重写dependOn方法,依赖于某个任务的初始化,比如极光推送初始化需要先获取设备id