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