【发布时间】:2020-01-07 12:43:22
【问题描述】:
kotlin coroutines中取消后如何重启job
我有 2 个按钮,一个用于启动协程,另一个用于取消作业。 但是在我取消作业后,协程不会再次启动。
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
}
}
【问题讨论】:
-
如果你决定不使用 MainScope(你应该使用它),去掉“get() = Dispatchers.Main + job”。这将在您每次访问时为您提供一个新的 CoroutineContext。