首先,你需要在你的 Kotlin 文件中导入协程库。 importkotlinx.coroutines.*// 导入协程库,为使用协程提供支持 1. 2. 创建一个子类或使用现有的类 然后,你可以在你的 Activity 或 Fragment 中创建CoroutineScope。 classMyActivity:AppCompatActivity(){// 创建一个 Activity类} 1. 2. 3. 在类中实现 Coroutin...
关于协程作用域:协程必须运行在CoroutineScope里(协程作用域),一个CoroutineScope管理一个或多个相关的协程。例如viewmodel-ktx包下面有viewModelScope,viewModelScope管理通过它启动的协程,如果viewModel被销毁,那么viewModelScope会自动被取消,通过viewModelScope启动的正在运行的协程也会被取消。 挂起与恢复 协程有suspend和res...
可以看到正在运行的协程被cancel后,会报异常JobCancellationException,可看到println("job 1")没有执行到 finally中的代码有正常执行,有打印日志(job: I'm running finally),可使用withContext(NonCancellable)创建协程做一些清理工作。 / 协程作用域 / 父子协程 ...
fun`test start mode`()=runBlocking{val job=async(context=Dispatchers.IO,start=CoroutineStart.UNDISPATCHED){println("thread:"+Thread.currentThread().name)}}//上面输出的线程名字是主线程,因为UNDISPATCHED会立即在当前线程中执行,而runBlocking是在主线程中 协程作用域构建器 coroutineScope、runBlocking、supervi...
原来GlobalScope是个类似 Java 中的单例类,它的协程上下文是个空上下文EmptyCoroutineContext。那么协程的启动方法是在哪里定义的呢,接口里我们好像没见到。原来协程的启动方法都是通过扩展函数来定义的,它的方法签名为: publicfunCoroutineScope.launch(context:CoroutineContext=EmptyCoroutineContext,start:CoroutineStart=Coro...
所以官方在kotlin协程中提供了一个默认在主线程运行的协程:MainScope,我们可以通过它来启动协。 public fun MainScope(): CoroutineScope = ContextScope(SupervisorJob() + Dispatchers.Main) 复制代码 我们可以看到MainScope的创建默认就使用了SupervisorJob和Dispatchers.Main。说明我们可以通过MainScope来处理UI组件刷新...
为了确保所有的协程都会被追踪,Kotlin 不允许在没有 CoroutineScope 的情况下启动协程。CoroutineScope 可被看作是一个具有超能力的 ExecutorService 的轻量级版本。它能启动协程,同时这个协程还具备上文所说的 suspend 和 resume 的优势 suspend suspend 是协程中很重的关键字,它用来修饰函数,表示此函数是一个会挂起...
一手遮天 Android - kotlin 协程: 协程基础(CoroutineScope, 为 CoroutineScope 扩展方法, runBlocking, launch, async, await, suspend, withContext, 设置/获取 CoroutineScope 的名称) 示例如下: /kotlin/coroutine/Demo1.kt /** * coroutine - 协程
协程作用域构建器 coroutineScope、runBlocking、supervisorScope runBlocking是常规函数,会阻塞当前线程;coroutineScope是挂起函数,不会阻塞当前线程 它们都会等待协程体以及所有子协程结束,一个是阻塞线程等待,一个是挂起等待 协程作用域构建器 coroutineScope、supervisorScope ...
协程主要有三部分组成,Job、CoroutineScope、Dispatcher。Job是每一个协程的句柄用来控制协程的生命周期。CoroutineScope是用来控制所有用它的launch或者async来创建的协程的生命周期。Dispatcher是用来对协程所处的线程进行调度。 Kotlin 协程使用调度程序确定哪些线程用于执行协程。要在主线程之外运行代码,可以让 Kotlin 协程...