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源码分析相关推荐

  1. Android HandlerThread 源码分析

    HandlerThread 简介: 我们知道Thread线程是一次性消费品,当Thread线程执行完一个耗时的任务之后,线程就会被自动销毁了.如果此时我们又有一 个耗时任务需要执行,我们不得不重新创建 ...

  2. Android ADB 源码分析(三)

    前言 之前分析的两篇文章 Android Adb 源码分析(一) 嵌入式Linux:Android root破解原理(二) 写完之后,都没有写到相关的实现代码,这篇文章写下ADB的通信流程的一些细节 ...

  3. 【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析

    [Android SDM660源码分析]- 02 - UEFI XBL QcomChargerApp充电流程代码分析 一.加载 UEFI 默认应用程序 1.1 LaunchDefaultBDSApps ...

  4. 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程

    [Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...

  5. 【Android SDM660源码分析】- 01 - 如何创建 UEFI XBL Protocol DXE_DRIVER 驱动及UEFI_APPLICATION 应用程序

    [Android SDM660源码分析]- 01 - 如何创建 UEFI XBL Protocol DXE_DRIVER 驱动及UEFI_APPLICATION 应用程序 一.创建DXE_DRIVER ...

  6. 【Android SDM660源码分析】- 04 - UEFI ABL LinuxLoader 代码分析

    [Android SDM660源码分析]- 04 - UEFI ABL LinuxLoader 代码分析 1. LinuxLoader.c 系列文章: <[Android SDM660开机流程] ...

  7. Android 音频源码分析——AndroidRecord录音(一)

    Android 音频源码分析--AndroidRecord录音(一) Android 音频源码分析--AndroidRecord录音(二) Android 音频源码分析--AndroidRecord音 ...

  8. Android框架源码分析——从设计模式角度看 Retrofit 核心源码

    Android框架源码分析--从设计模式角度看 Retrofit 核心源码 Retrofit中用到了许多常见的设计模式:代理模式.外观模式.构建者模式等.我们将从这三种设计模式入手,分析 Retrof ...

  9. 人人网官方Android客户端源码分析(1)

    ContentProvider是不同应用程序之间进行数据交换的标准API,ContentProvider以某种Uri的形式对外提供数据,允许其他应用访问或修改数据;其他应用程序使用ContentRes ...

最新文章

  1. 阿里一面 京东一面+二面 | 掘金技术征文
  2. 对Linux系统中的时钟和时间的探讨
  3. grub2配置原理分析
  4. 把ct图像像素值转化为_CT爱好者的点点滴滴
  5. 20春计算机应用基础在线作业,19春学期《计算机应用基础》在线作业21.txt
  6. 【Unity3D】地形Terrain
  7. 电脑故障,usb驱动安装失败如何修复解决方案-驱动人生
  8. IP被封检测和端口被封检测方法分享
  9. Vivado 自定义暗黑色主题字体、颜色,复用自定义主题。文末附黑色主题设置文件
  10. http协议1.0和1.1的区别
  11. 3种方法保护Word文档不可随意编辑
  12. Centos6.5 LAMP环境源码包安装与配置,附安装包百度网盘地址
  13. 港科喜讯 | 香港科大校长史维教授获法国政府颁授勋章
  14. Bootstrap栅格布局分析grid源码
  15. Duplicate class okhttp3...
  16. android 恢复出厂,安卓(Android)手机恢复出厂设置的方法
  17. Ubuntu 16.04 LTS安装sogou输入法详解
  18. Flutter事件分发流程简析
  19. Python列表的extend函数
  20. linux系统中病毒怎么解决,Linux 服务器中木马病毒及清除过程

热门文章

  1. 织梦tags.php文件,DEDECMS织梦tags标签关键词url以ID
  2. 高通410c编译烧写安卓代码
  3. 河北省廊坊市谷歌卫星地图下载
  4. 关于小程序,他们这么看!
  5. 【gitHubDailyShare】莫斯科三星人工智能中心开源,快速进行图像修复、指定对象移除
  6. 基于servlet+jsp+mysql人事工资管理系统(含实训报告)
  7. 低代码平台为何需要信创国产化?
  8. Java寒假作业蓝桥杯,[蓝桥杯2016初赛]寒假作业
  9. 为什么同样是100M光纤入户,你的宽带就那么慢?—Vecloud微云
  10. 高德地图api之location定位