推荐一个更贴近-android-场景的启动框架---Anchors,我想谈谈关于Android面试那些事

本文讨论了Android应用启动框架的选择,分析了alpha框架的不足,如任务粒度不够细、同步初始化支持不佳等问题。推荐使用Anchors框架,它更贴近Android场景,支持同异步依赖任务初始化,提供锚点任务特性,解决复杂的同步问题。Anchors已在作者的项目中稳定运行一年,具有更好的灵活性和性能。
摘要由CSDN通过智能技术生成

倘若不进行任务分类初始化,则首帧显示前需要完成所有任务的初始化

分类之后,对原来 Task 进行依赖排列如下

![](https://upload-
images.jianshu.io/upload_images/22459598-917448f3431065e1?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

降低初始化阻塞时间收益如下

然而在实际场景中,拆分出来的三个方法中的任务可能存在依赖关系导致情况变得复杂:

  1. onCreateBlock() 只能依赖 onCreateAsync() 内任务m依赖 onCreateSync() 会导致死锁;

  2. onCreateSync()  可依赖其他两个方法内的任务;

  3. onCreateAsync() 可依赖其他两个方法内的任务,同时可尽可能支持多条子线程任务来加快缩短所有异步任务的完成时间,这取决于当前设备的 CPU 状态

如果按照上述的逻辑来重新梳理启动任务的初始化,则需要实现一下逻辑:

  1. 封装 Task 支持上述三种场景的运行

  2. 提供线程池以运行异步任务,Handler#Post 运行同步非阻塞任务

  3. 以 Task 为图节点,构建一张应用依赖启动图并从头部开始初始化

  4. Task 运行状态支持拦截提供外部业务逻辑获取状态,打断初始化等

  5. 多条异步子链运行时尽可能保持同时并发

希望完成上述功能,优先考虑现有轮子。于是在 github找到了 alpha 。

https://github.com/alibaba/alpha

alpha  是一个阿里巴巴开源的,基于PERT图构建的Android异步启动框架,协助应用启动时正确执行依赖任务。

集成了之后发现满足不了项目的应用场景,当时并没有很好的解决方法,迫于项目需求当晚就 clone 下了源码研究了实现,略感失落,但也找到了优化的方向。

alpha 的缺陷

1. 启动节点粒度不够细
alpha 封装了 Task 类用于表示一个异步任务, 衍生出Proj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值