因为最近空闲时间比较多,所以 有时间研究一下App的优化,首先看的是启动速度优化,查找了好多资料,无非是将启动过程由原来的单线程转变为多线程执行,比如,在你的App中的Application的oncreate方法,通常,第三方SDK的初始化会集中在这里进行。这里呢,由于进行大量的SDK初始化的工作,所以会比较耗时,所以解决App启动太慢,就要从这里入手。
比如,在App中会有网络请求的初始化、加载控件的初始化、第三方推送(友盟、极光为例)的初始化、本地数据库的初始化、等等一系列的初始化操作,如果不采取一定的措施,那么随着App功能越来越丰富,那需要在这里进行的初始化工作会越来越多,App启动速度会越来越慢。下面我介绍一种解决方案。
首先,定义线程调度类,DispatcherExecutor。这个类的主要作用就是初始化线程池,作为接收所有任务的容器类。
然后,将App的各种初始化功能封装为各种任务,通过回调方法来判断各个任务的依赖关系。
在oncreate方法中,初始化任务对象,然后将各个对象塞入任务容器,这里边会有一个算法的操作,称为有向无环图的拓扑排序,将有依赖关系的各任务执行关系进行排序,排序好的任务会按新排序的顺序依次执行,无依赖关系的任务会直接交给线程调度器进行执行。
当然了,因为有些SDK的初始化操作是需要在主线程完成的,所以要充分考虑这一需求,在任务调度执行时进行线程判断。
经过一系列的操作之后呢,我们之前单线程的执行代码顺序变为多线程一起执行,这也是我们做这个优化的核心思想。