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开始执行启动任务。
- 如果是无依赖的异步任务,直接执行
- 如果是无依赖的同步任务,顺序执行
- 有依赖的任务,首先检查是否有依赖环,然后排除空任务,最后将当前任务添加到依赖任务的children数组里去。
- 执行任务
主要通过execute(task: TaskInfo)方法来完成
- 首先判断是否处于正确的进程,通过isMatchProgress(task: TaskInfo)方法中比较当前进程与任务进程来实现。
- 执行任务接口的execute方法,执行任务定义的逻辑,并发送回调(回调监听)。
- 当前任务执行完后,调用afterExecute(name: String, children: Set<TaskInfo>)方法,在afterExecute中过滤掉已经完成的依赖任务,然后根据任务是否异步,同步或者异步执行依赖任务(异步任务)。
3.总结
总的来看框架整体实现比较简单,容易上手或者改造,有一个瑕疵是任务优先级priority并没有实现。较为复杂的点在于任务的执行部分逻辑,需要依次进行依赖环检查,进程判断,线程判断,children依赖任务执行步骤。
以上是关于Android——CInit源码分析的主要内容,如果未能解决你的问题,请参考以下文章
瑕疵检测基于matlab gabor滤波布匹瑕疵检测含Matlab源码 407期