DSAppTeam / Anchors

:white_check_mark: Anchors 是一个基于图结构,支持同异步依赖任务初始化 Android 启动框架。其锚点提供 "勾住" 依赖的功能,能灵活解决初始化过程中复杂的同步问题。参考 alpha 并改进其部分细节, 更贴合 Android 启动的场景, 同时支持优化依赖初始化流程, 自动选择较优的路径进行初始化。
Apache License 2.0
817 stars 79 forks source link

[bug][anchors/AnchorsManager.kt] : #24

Closed HongdouHub closed 3 years ago

HongdouHub commented 3 years ago

外部调用方式如下: val manager = getInstance().debuggable { true }.taskFactory { factory }.graphics {xxx} val lockableAnchor = manager.requestBlockWhenFinish(factory.getTask(TASK_10)) lockableAnchor.setLockListener(object : LockableAnchor.LockListener {}) manager.startUp()

解决外部直接调用 AnchorsManager#requestBlockWhenFinish时,但未执行 graphics.invoke()导致 暂未初始化 taskId 对应的 'TASK'实例,requestBlockWhenFinish方法传入的是空实例(内部没有 依赖与被依赖关系),此时生成的LockableTask内部也为空,将导致锁无法锁住后续任务。

HongdouHub commented 3 years ago

AnchorsManagerBuilder.allTask这个属性,在原有代码上已经存在(但一直未被使用),其赋值是在 “String.sons” 和 “String.alsoParents” 这两个扩展函数中。因为已经有了赋值,所以提交的代码上没有做此方面的改动。

YummyLau commented 3 years ago

@HongdouHub 调整之后,所有task的依赖都会被添加 inner_start_up_task。validSon选择保存之后提前初始化即可。