关键点
小于 1 分钟
- 协程的所有信息都包含在
CoroutineContext及其CoroutineContext.Elements中。 - 有三个主要的协程上下文元素:首先是具有生命周期定义并且可以取消的
Job,然后是可以处理协程异常的CoroutineExceptionHandler,最后是处理协程函数执行流程和执行线程的ContinuationInterceptor。 - 每一个协程上下文元素都实现了
CoroutineContext。 ContinuationInterceptors负责线程的切换。主线程和后台线程是通过Dispatchers提供的。- 你可以使用
+/plus操作符组合不同的CoroutineContexts以及它们的Elements,从而有效的合并它们的元素。 - 一个好的实践是构建一个
CoroutineContext提供器,因此你就不会依赖明确的上下文。 - 你可以通过
CoroutineContextProvider提供复杂的上下文,比如:自定义的异常处理器,具有生命周期的协程或者线程机制。 CoroutineContextProvider在测试中非常有用,因为你可以提供特定于测试环境的上下文。
