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源码分析相关推荐
- Android HandlerThread 源码分析
HandlerThread 简介: 我们知道Thread线程是一次性消费品,当Thread线程执行完一个耗时的任务之后,线程就会被自动销毁了.如果此时我们又有一 个耗时任务需要执行,我们不得不重新创建 ...
- Android ADB 源码分析(三)
前言 之前分析的两篇文章 Android Adb 源码分析(一) 嵌入式Linux:Android root破解原理(二) 写完之后,都没有写到相关的实现代码,这篇文章写下ADB的通信流程的一些细节 ...
- 【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析
[Android SDM660源码分析]- 02 - UEFI XBL QcomChargerApp充电流程代码分析 一.加载 UEFI 默认应用程序 1.1 LaunchDefaultBDSApps ...
- 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
[Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...
- 【Android SDM660源码分析】- 01 - 如何创建 UEFI XBL Protocol DXE_DRIVER 驱动及UEFI_APPLICATION 应用程序
[Android SDM660源码分析]- 01 - 如何创建 UEFI XBL Protocol DXE_DRIVER 驱动及UEFI_APPLICATION 应用程序 一.创建DXE_DRIVER ...
- 【Android SDM660源码分析】- 04 - UEFI ABL LinuxLoader 代码分析
[Android SDM660源码分析]- 04 - UEFI ABL LinuxLoader 代码分析 1. LinuxLoader.c 系列文章: <[Android SDM660开机流程] ...
- Android 音频源码分析——AndroidRecord录音(一)
Android 音频源码分析--AndroidRecord录音(一) Android 音频源码分析--AndroidRecord录音(二) Android 音频源码分析--AndroidRecord音 ...
- Android框架源码分析——从设计模式角度看 Retrofit 核心源码
Android框架源码分析--从设计模式角度看 Retrofit 核心源码 Retrofit中用到了许多常见的设计模式:代理模式.外观模式.构建者模式等.我们将从这三种设计模式入手,分析 Retrof ...
- 人人网官方Android客户端源码分析(1)
ContentProvider是不同应用程序之间进行数据交换的标准API,ContentProvider以某种Uri的形式对外提供数据,允许其他应用访问或修改数据;其他应用程序使用ContentRes ...
最新文章
- 阿里一面 京东一面+二面 | 掘金技术征文
- 对Linux系统中的时钟和时间的探讨
- grub2配置原理分析
- 把ct图像像素值转化为_CT爱好者的点点滴滴
- 20春计算机应用基础在线作业,19春学期《计算机应用基础》在线作业21.txt
- 【Unity3D】地形Terrain
- 电脑故障,usb驱动安装失败如何修复解决方案-驱动人生
- IP被封检测和端口被封检测方法分享
- Vivado 自定义暗黑色主题字体、颜色,复用自定义主题。文末附黑色主题设置文件
- http协议1.0和1.1的区别
- 3种方法保护Word文档不可随意编辑
- Centos6.5 LAMP环境源码包安装与配置,附安装包百度网盘地址
- 港科喜讯 | 香港科大校长史维教授获法国政府颁授勋章
- Bootstrap栅格布局分析grid源码
- Duplicate class okhttp3...
- android 恢复出厂,安卓(Android)手机恢复出厂设置的方法
- Ubuntu 16.04 LTS安装sogou输入法详解
- Flutter事件分发流程简析
- Python列表的extend函数
- linux系统中病毒怎么解决,Linux 服务器中木马病毒及清除过程
热门文章
- 织梦tags.php文件,DEDECMS织梦tags标签关键词url以ID
- 高通410c编译烧写安卓代码
- 河北省廊坊市谷歌卫星地图下载
- 关于小程序,他们这么看!
- 【gitHubDailyShare】莫斯科三星人工智能中心开源,快速进行图像修复、指定对象移除
- 基于servlet+jsp+mysql人事工资管理系统(含实训报告)
- 低代码平台为何需要信创国产化?
- Java寒假作业蓝桥杯,[蓝桥杯2016初赛]寒假作业
- 为什么同样是100M光纤入户,你的宽带就那么慢?—Vecloud微云
- 高德地图api之location定位