Android——CInit源码分析

Posted 化作孤岛的瓜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android——CInit源码分析相关的知识,希望对你有一定的参考价值。

1.前言

CInit 是一个Android 依赖任务启动框架(https://github.com/wangchenyan/init)

最近在分析公司的启动框架,发现虽然实现了DAG结构,可以支持任务依赖,同异步,优先级回调等功能,但是缺点也有很多,配置只能代码配置,不支持注解,不支持多进程等,已经落后于时代了- =!所以找到CInit来研究一下。

2.功能实现

功能模块划分:

model划分:

  • init-annotation:注解,任务,任务信息定义
  • init-api:主要功能实现,任务注册
  • init-compiler:注解处理器
  • init-compiler-ksp:注解处理器ksp版
  • sample:示例
  • sample-lib:模拟lib中的人物

框架执行过程:

2.1 任务的采集部分

通过apt收集所有设置了InitTask注解的任务(注解配置),并生成模块任务注册器(模块化),然后通过AutoRegister将所有的模块注册器加入到FinalTaskRegister中汇总。

AbstractProcessor实现:me.wcy.init.compiler.TaskProcessor

ksp实现:me.wcy.init.ksp.TaskProcessor

任务抽象为TaskInfo,描述了任务名,是否异步,优先级,依赖任务,进程等信息。

2.2 任务的执行与调度部分

主要通过me.wcy.init.api.CTaskManager来实现。

  • 初始化

在Application的onCreate中调用CTaskManager开始执行启动任务。

  1. 如果是无依赖的异步任务,直接执行
  2. 如果是无依赖的同步任务,顺序执行
  3. 有依赖的任务,首先检查是否有依赖环,然后排除空任务,最后将当前任务添加到依赖任务的children数组里去。
  • 执行任务

主要通过execute(task: TaskInfo)方法来完成

  1. 首先判断是否处于正确的进程,通过isMatchProgress(task: TaskInfo)方法中比较当前进程与任务进程来实现。
  2. 执行任务接口的execute方法,执行任务定义的逻辑,并发送回调(回调监听)。
  3. 当前任务执行完后,调用afterExecute(name: String, children: Set<TaskInfo>)方法,在afterExecute中过滤掉已经完成的依赖任务,然后根据任务是否异步,同步或者异步执行依赖任务(异步任务)

3.总结

总的来看框架整体实现比较简单,容易上手或者改造,有一个瑕疵是任务优先级priority并没有实现。较为复杂的点在于任务的执行部分逻辑,需要依次进行依赖环检查,进程判断,线程判断,children依赖任务执行步骤。

 

以上是关于Android——CInit源码分析的主要内容,如果未能解决你的问题,请参考以下文章

瑕疵检测基于matlab gabor滤波布匹瑕疵检测含Matlab源码 407期

Android开发者上手宝典

图像检测基于 gabor滤波器布匹瑕疵检测matlab源码

瑕疵检测基于灰度共生矩阵实现痕迹检测matlab源码GUI

图像处理基于遗传算法优化Gabor滤波器提取织物表面特征值进行织物瑕疵识别和处理matlab源码

有瑕疵的Android四则运算