abstract class ScopedAppActivity: AppCompatActivity(), CoroutineScope {
protected lateinit var job: Job
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.Main
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
job = Job()
launch(Dispatchers.Main) {
try {
delay(Long.MAX_VALUE)
} catch (e: Exception) {
// e will be a JobCancellationException if the activty is destroyed
}
}
}
override fun onDestroy() {
super.onDestroy()
job.cancel()
}
}
本示例复制自协程指南,并由launch(Dispatchers.Main)
协程扩展。我不明白为什么+ Dispatchers.Main
需要第 4 行。如果我删除这部分,launch
如果 Activity 被销毁,协程无论如何都会被取消。那么是什么原因Dispatchers.Main
呢?为什么Dispatchers.IO
也不添加呢?