深色模式
协程上下文
协程上下文 CoroutineContext
CoroutineContext
是一个包含了用户定义的一些各种不同元素的Element
对象集合,CoroutineContext
使用以下元素集定义协程的行为:
Job
:控制协程的生命周期。CoroutineDispatcher
:将工作分派到适当的线程。ContinuationInterceptor
:拦截器CoroutineName
:协程的名称,可用于调试。CoroutineExceptionHandler
:处理未捕获的异常。
协程调度器 CoroutineDispatcher
调度器它确定了相关的协程在哪个线程或哪些线程上执行。协程调度器可以将协程限制在一个特定的线程执行,或将它分派到一个线程池,亦或是让它不受限地运行。
Dispatchers.Default
:默认调度器,CPU密集型任务调度器,适合处理后台计算。通常处理一些单纯的计算任务,或者执行时间较短任务。比如:Json的解析,数据计算等Dispatchers.IO
:IO调度器,,IO密集型任务调度器,适合执行IO相关操作。比如:网络处理,数据库操作,文件操作等Dispatchers.Main
:UI调度器, 即在主线程上执行,通常用于UI交互,刷新等Dispatchers.Unconfined
:非受限调度器,又或者称为“无所谓”调度器,不要求协程执行在特定线程上。ExecutorCoroutineDispatcher
:线程池调度器。有多种方式可以创建线程池调度器:
ExecutorService.asCoroutineDispatcher()
:将线程池转换为线程池调度器。Executor.asCoroutineDispatcher()
:将线程池转换为线程池调度器。newSingleThreadContext()
:单线程的线程池调度器。newFixedThreadPoolContext()
:指定线程数的线程池调度器。