gpt4 book ai didi

kotlin - 在kotlin协程中取消后如何重新启 Action 业?

转载 作者:行者123 更新时间:2023-12-02 12:07:04 24 4
gpt4 key购买 nike

如何重启job取消后 kotlin coroutines
我有 2 个按钮,1 个用于启动协程,另一个用于取消作业。
但是在我取消作业后,协程不会再次启动。

class TestFragment : Fragment(), CoroutineScope {

private lateinit var job: Job
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = SettingFragmentBinding.inflate(inflater, container, false)

job = Job()

button1.setOnClickListener {
launch {
val currentTime = LocalDateTime.now()
println(currentTime)
}
}

button2.setOnClickListener {
job.cancel()
}

return binding.root
}

}

最佳答案

您不恰本地使用链接到片段生命周期的顶级作业作为按需取消协程的手段。

替换此样板:

class TestFragment : Fragment(), CoroutineScope {

private lateinit var job: Job
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job

有了这个:
class TestFragment : Fragment(), CoroutineScope by MainScope {
override fun onDestroy() {
cancel()
}

这将自动修复您引入的问题之一:它使用 SupervisorJob而不是普通的 Job .

接下来,您需要访问您在 onClick 中启动的作业:
    private var button1Job: Job?

...

button1.setOnClickListener {
button1Job = launch {
...
button1Job = null
}

您现在可以在 button2 中取消此工作听众:
    button1Job?.cancel()

关于kotlin - 在kotlin协程中取消后如何重新启 Action 业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59628666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com