• Stars
    star
    369
  • Rank 115,686 (Top 3 %)
  • Language
    Kotlin
  • Created almost 4 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

锚点任务,可以用来解决多线程加载任务依赖的问题。常见的,比如 Android 启动优化,通常会进行多线程异步加载

我的 CSDN 博客:https://blog.csdn.net/gdutxiaoxu
我的掘金:https://juejin.im/user/2207475076966584
github: https://github.com/gdutxiaoxu/
微信公众号:程序员徐公

AnchorTask

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

基本使用

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

implementation 'io.github.gdutxiaoxu:anchortask:1.1.0'

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

具体使用文档

0.1.0 版本

0.1.0 版本使用说明见这里 AnchorTask 0.1.0 版本使用说明

0.1.0 版本实现借鉴了 android-startupAppStartFasterAnchorTask 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 监听,方便统计各个任务的耗时

实现原理

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

  1. 根据 BFS 构建出有向无环图,并得到它的拓扑排序
  2. 在多线程执行过程中,我们是通过任务的子任务关系和 CounDownLatch 确保先后执行关系的
    1. 前置任务没有执行完毕的话,等待,执行完毕的话,往下走
    2. 执行任务
    3. 通知子任务,当前任务执行完毕了,相应的计数器(入度数)要减一。

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

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

特别鸣谢

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

android-startup

alpha

AppStartFaster

系列文章

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

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

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

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

Android 启动优化(三)- AnchorTask 开源了

Android 启动优化(四)- AnchorTask 是怎么实现的

Android 启动优化(五)- AnchorTask 1.0.0 版本正式发布了

Android 启动优化(六)- 深入理解布局优化

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

More Repositories

1

CoordinatorLayoutExample

CoordinatorLayout 打造炫酷效果的例子
Java
947
star
2

AndroidGuide

「Android学习+面试指南」一份涵盖大部分 Android 程序员所需要掌握的核心知识。准备 Android 面试,首选 AndroidGuide!公众号程序员徐公
268
star
3

MarqueeView

跑马灯效果,支持 View 的复用,不同的 View, 各种动画效果
Java
119
star
4

FunAPP

这是我自己动手开发的APP,会逐渐完善
Java
109
star
5

TouchDemo

这是关于View滑动事件冲突的demo,里面讲解怎样解决View滑动冲突,包括ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
Java
81
star
6

clipimage

Java
74
star
7

nestedwebview

nestedwebview
Kotlin
33
star
8

CommonLibrary

Java
26
star
9

QQBottomTab

仿qq 底部tab
Java
25
star
10

HookDemo

Java
23
star
11

ViewPagerTabIndicator

这是使用HorizontalScrollView封装的 ViewPager的 页面导航器,有多种样式可以选择
Java
21
star
12

FragmentDemo

Java
21
star
13

drawLayout

仿qq,网易新闻的自定义抽屉开关。
Java
13
star
14

RecyclerViewSample

Java
11
star
15

AidlDemo

Java
10
star
16

MultiImageView

Java
10
star
17

Networklibrary

Java
10
star
18

ArchiteComponentsSample

Java
9
star
19

Router

Java
7
star
20

RetrofitDemo

Java
6
star
21

FlowLayout

在Android开发中,我们经常会遇到流布式的布局,经常会用来一些标签的显示,比如qq中个人便签,搜索框下方提示的词语,这些是指都是流布式的布局,今天我就我们日常开放中遇到的流布式布局坐一些总结
Java
5
star
22

BaseLibrary

Java
3
star
23

ARounterDemo

Java
3
star
24

MultiInterfaceViewDemo

这是一个关于多个界面的处理demo,该空间集成了空界面,错误界面,加载中的界面,成功的界面,使用起来比较方便
Java
2
star
25

MaxLayout

Java
1
star
26

AndroidStudioData

这是我电脑上AndroidStudio的一些资料
1
star
27

ExtensibleViewDemo

这个仓库是用来存放点击收藏和展开的空间的
Java
1
star
28

AnnotationDemo

Java
1
star
29

leetcode

leetcode 算法题目
1
star
30

Contacts

实现了联系人搜索功能(模糊拼音,汉语)及带首字母导航
Java
1
star
31

CustomProgressBar

这一一个关于自定义ProgressBar的仓库,实现自定义progressBar图片,圆形带进度ProgressBar,长方形带进度progressBar
Java
1
star