DSAppTeam / Anchors

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

java.util.ConcurrentModificationException #30

Closed achenglike closed 3 years ago

achenglike commented 3 years ago

AnchorsRuntime#runBlockTask 存在多线程操作问题,tryRunBlockRunnable 主线程操作 addRunTasks 在主线程和工作现场都会操作,导致多线程问题。

Caused by: java.util.ConcurrentModificationException at java.util.ArrayList.sort(ArrayList.java:1472) at java.util.Collections.sort(Collections.java:201) at com.effective.android.anchors.AnchorsRuntime.tryRunBlockRunnable$anchors_release(AnchorsRuntime.kt:3) at com.effective.android.anchors.AnchorsManager.start(AnchorsManager.kt:17)

YummyLau commented 3 years ago

@achenglike 目前有手动添加addRunTasks么? 还是执行框架依赖图。

achenglike commented 3 years ago

@achenglike 目前有手动添加addRunTasks么? 还是执行框架依赖图。

没有主动调用。各个task做完dependOn排序后直接把UI早的task交给AnchrosManager进行了start

//java 代码 AnchorsManager.getInstance().debuggable(true) .addAnchors(anchorYouNeed) //传递任务id设置锚点任务 .start(dependencyGraphHead); //传入依赖图头部

此种方式

YummyLau commented 3 years ago

@achenglike 嗯嗯收到。这个问题会尽快处理。

YummyLau commented 3 years ago

v1.1.4,使用jitPack依赖