DSAppTeam / Anchors

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

bug吗?大佬解释下 #18

Closed for7GG closed 4 years ago

for7GG commented 4 years ago

微信截图_20200731125244

for7GG commented 4 years ago

什么都没点,job怎么执行这么多次?

YummyLau commented 4 years ago

你提供的信息看不出什么问题。这个应该不是demo的逻辑,你改动什么了吗? 得看下你的图怎么写。

for7GG commented 4 years ago

我没改代码,就是加了执行job的log

for7GG commented 4 years ago
    fun doJob(name:String,millis: Long) {
        val nowTime = System.currentTimeMillis()
        while (System.currentTimeMillis() < nowTime + millis) {
            //程序阻塞指定时间
            val min = 10
            val max = 99
            val random = Random()
            val num = random.nextInt(max) % (max - min + 1) + min
            Log.e("doJob","是是是 doJob $name")
        }
    }
YummyLau commented 4 years ago

你试一下DEMO MainActivity

    private fun testUserChoose() {
        findViewById<View>(R.id.test_user_anchor).setOnClickListener {
            Log.d("MainActivity", "Demo1 - testUserChoose")
            val anchor = TaskTest().startForTestLockableAnchor()
            anchor.setLockListener(object : LockableAnchor.LockListener {
                override fun lockUp() {
                    CusDialog.Builder(this@MainActivity)
                            .title("任务(" + anchor.lockId + ")已进入等待状态,请求响应")
                            .left("终止任务", View.OnClickListener {
                                anchor.smash()
                            })
                            .right("继续执行", View.OnClickListener {
                                anchor.unlock()
                            }).build().show()
                }
            })
//            TaskTest().startForTestLockableAnchorByDsl {
//                val lockableAnchor = it
//                CusDialog.Builder(this@MainActivity)
//                        .title("任务(" + lockableAnchor.lockId + ")已进入等待状态,请求响应")
//                        .left("终止任务", View.OnClickListener {
//                            lockableAnchor.smash()
//                        })
//                        .right("继续执行", View.OnClickListener {
//                            lockableAnchor.unlock()
//                        }).build().show()
//            }
            Log.d("MainActivity", "Demo1 - testUserChoose")
        }
    }

不使用dsl 是否有问题。

for7GG commented 4 years ago

还是同样的问题 微信截图_20200731154540

YummyLau commented 4 years ago

你的Task 10 一直在循环,打出这些log为何是错误的?

    fun doJob(name:String,millis: Long) {
        val nowTime = System.currentTimeMillis()
        while (System.currentTimeMillis() < nowTime + millis) {
            //程序阻塞指定时间
            val min = 10
            val max = 99
            val random = Random()
            val num = random.nextInt(max) % (max - min + 1) + min
            Log.e("doJob","是是是 doJob $name")
        }
    }

其 Task11/12等son,需要结束watier才显示。

你可以过滤 DEPENDENCE_DETAIL 看下。 TASK_10 --> TASK_10_waiter --> TASK_11 --> TASK_12 --> TASK_13

for7GG commented 4 years ago

哦,明白了,感谢

YummyLau commented 4 years ago

在dsl模式下,block存在一个时序的bug,修复了还没有发布,block功能如果需要使用的话,是用非dsl就好。

for7GG commented 4 years ago

正常了 image