android用子线程加载,AnchorTask 锚点任务,可以用来解决多线程加载任务依赖的问题。常见的,比如 Android 启动优化,通常会进行多线 @codeKK Android开源站...

锚点任务,可以用来解决多线程加载任务依赖的问题。实现原理是使用有向无环图,常见的,比如 Android 启动优化,通常会进行多线程异步加载。

基本使用

第一步:在 moulde build.gradle 配置远程依赖

implementation 'com.xj.android:anchortask:1.0.0'

具体使用文档

0.1.0 版本

1.0.0 版本

两个版本之间区别

之前的 0.1.0 版本 配置前置依赖任务,是通过 AnchorTask getDependsTaskList 的方式,这种方式不太直观,1.0.0 放弃了这种方式,参考阿里 Alpha 的方式,通过 addTask(TASK_NAME_THREE).afterTask(TASK_NAME_ZERO, TASK_NAME_ONE)

1.0.0 版本新增了 Project 类,并增加 OnProjectExecuteListener 监听

1.0.0 版本新增 OnGetMonitorRecordCallback 监听,方便统计各个任务的耗时

实现原理

AnchorTask 的原理不复杂,本质是有向无环图与多线程知识的结合。

根据 BFS 构建出有向无环图,并得到它的拓扑排序

在多线程执行过程中,我们是通过任务的子任务关系和 CounDownLatch 确保先后执行关系的前置任务没有执行完毕的话,等待,执行完毕的话,往下走

执行任务

通知子任务,当前任务执行完毕了,相应的计数器(入度数)要减一。

特别鸣谢

在实现这个开源框架的时候,借鉴了以下开源框架的思想。AppStartFaster 主要是通过 ClassName 找到相应的 Task,而阿里 alpha 是通过 taskName 找到相应的 Task,并且需要指定 ITaskCreator。两种方式各有优缺点,没有优劣之说,具体看使用场景。

系列文章

这几篇文章从 0 到 1,讲解 DAG 有向无环图是怎么实现的,以及在 Android 启动优化的应用。

推荐理由:现在挺多文章一谈到启动优化,动不动就聊拓扑结构,这篇文章从数据结构到算法、到设计都给大家说清楚了,开源项目也有非常强的借鉴意义。

如果觉得对你有所帮助的,可以关注我的微信公众号,程序员徐公。主要更新 Android 技术,算法,职场相关的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值