登录

去注册 忘记密码?

登录

注册

去登录

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

注册

解锁回答区域

  • 扫码关注公众号
  • 发送“我爱安卓

若你登陆,将永久解锁;
若未登录,仅本机解锁。

解锁回答区域

获取注册验证码

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

AnchorTask - Android 启动优化

gdutxiaoxu   2021-02-24 23:11   收藏

AnchorTask

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

我的 CSDN 博客:https://blog.csdn.net/gdutxiaoxu

我的掘金:https://juejin.im/user/2207475076966584

github: https://github.com/gdutxiaoxu/

微信公众号:程序员徐公(stormjun94)

知乎:https://www.zhihu.com/people/xujun94

基本使用

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

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

最新的版本号可以看这里 lastedt version

具体使用文档

有向无环图的实现

Android 启动优化(一) - 有向无环图

Android 启动优化(二) - 拓扑排序的原理以及解题思路

0.1.0 版本

0.1.0 版本使用说明见这里 AnchorTask 0.1.0 版本使用说明, 0.1.0 版本实现借鉴了 android-startupAppStartFaster

AnchorTask 0.1.0 原理

1.0.0 版本

AnchorTask 1.0.0 版本使用说明,参考了阿里 alpha

AnchorTask-1.0.0-原理说明

两个版本之间区别

  1. 之前的 0.1.0 版本 配置前置依赖任务,是通过 AnchorTask getDependsTaskList 的方式,这种方式不太直观,1.0.0 放弃了这种方式,参考阿里 Alpha 的方式,通过 addTask(TASK_NAME_THREE).afterTask(TASK_NAME_ZERO, TASK_NAME_ONE)
  2. 1.0.0 版本新增了 Project 类,并增加 OnProjectExecuteListener 监听
  3. 1.0.0 版本新增 OnGetMonitorRecordCallback 监听,方便统计各个任务的耗时

特别鸣谢

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

android-startup

alpha

AppStartFaster

项目地址:https://github.com/gdutxiaoxu/AnchorTask