APP性能优化系列-自定义启动器(三)

很简单,主要做的是:

1.根据dependsOn() 定义一个栅栏

很好理解,传入的task(我们的耗时任务),因为需要依赖,比如TaskA,必须得等TaskB,TaskC加载完毕才能加载TaskA,那么dependsOn()返回的就是TaskB,TaskC,也就是在TaskA中加了几个同步锁(锁的数量就是TaskA所需要依赖的Task数量),每次执行satisfy()就减少一把锁。

3.实现启动器


外部调用

TaskDispatcher instance = TaskDispatcher.createInstance();

instance.addTask(new InitBuglyTask()) // 默认添加,并发处理

.addTask(new InitBaiduMapTask()) // 在这里需要先处理了另外一个耗时任务initShareSDK,才能再处理它

.addTask(new InitJPushTask()) // 等待主线程处理完毕,再进行执行

.start();

instance.await();

构建启动器

public class TaskDispatcher {

private static Context mContext;

private static boolean sHasInit;

private static boolean sIsMainProcess;

// 存放依赖

private HashMap<Class<? extends Task>, ArrayList> mDependedHashMap = new HashMap<>();

// 存放所有的task

private List mAllTasks = new ArrayList<>();

private List<Class<? extends Task>> mClsAllTasks = new ArrayList<>();

// 调用了await的时候还没结束的且需要等待的Task队列

private List mNeedWaitTasks = new ArrayList<>();

// 已经结束了的Task队列

private volatile List<Class<? extends Task>> mFinishedTasks = new ArrayList<>(100);

// 需要在主线程中执行的Task队列

private volatile List mMainThreadTasks = new ArrayList<>();

// 保存需要Wait的Task的数量

private AtomicInteger mNeedWaitCount = new AtomicInteger();

private CountDownLatch mCountDownLatch;

/**

  • 注意:每次获取的都是新对象

*/

public static TaskDispatcher getInstance(Context context) {

if (context != null) {

mContext = context;

sHasInit = true;

sIsMainProcess = Utils.isMainProcess(mContext);

}

retur

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值