Kotlin协程
| 作用域构建器 | 说明 | 调用 | 
|---|---|---|
| GlobalScope.launch函数 | 每次创建的都是一个顶层协程,这种协程当应用程序运行结束时也会跟着一起结束。 不建议使用。 | 可以在任意地方调用。 | 
| runBlocking函数 | 同样会创建一个协程的作用域,但是它可以保证在协程作用域内的所有代码和子协程没有全部执行完之前一直阻塞当前线程。 通常只应该在测试环境下使用。 | 可以在任意地方调用。 | 
| launch函数 | 和我们刚才所使用的GlobalScope.launch函数不同。首先它必须在协程的作用域中才能调用,其次它会在当前协程的作用域下创建子协程。子协程的特点是如果外层作用域的协程结束了,该作用域下的所有子协程也会一同结束。 返回值是一个Job对象。 | 只能在协程作用域中调用。 | 
| coroutineScope函数 | 也是一个挂起函数,因此可以在任何其他挂起函数中调用。它的特点是会继承外部的协程的作用域并创建一个子协程,借助这个特性,我们就可以给任意挂起函数提供协程作用域了。它可以保证其作用域内的所有代码和子协程在全部执行完之前,会一直阻塞当前协程。 | 可以在协程作用域或挂起函数中调用。 | 
| CoroutineScope()函数 | 会返回一个CoroutineScope对象,可以随时调用CoroutineScope对象的launch函数来创建一个新协程了。 所有调用CoroutineScope的launch函数所创建的协程,都会被关联在Job对象的作用域下面。这样只需要调用一次cancel()方法,就可以将同一作用域内的所有协程全部取消。 | |
| async函数 | 会创建一个新的子协程并返回一个Deferred对象,如果我们想要获取async函数代码块的执行结果,只需要调用Deferred对象的await()方法。 在调用了async函数之后,代码块中的代码就会立刻开始执行。当调用await()方法时,如果代码块中的代码还没执行完,那么await()方法会将当前协程阻塞住,直到可以获得async函数的执行结果。 | 只能在协程作用域调用。 | 
| withContext()函数 | 是一个挂起函数,大体可以将它理解成async函数的一种简化版写法。 调用withContext()函数之后,会立即执行代码块中的代码,同时将外部协程挂起。 withContext()函数强制要求我们指定一个线程参数(线程参数会给协程指定一个具体的运行线程)。线程参数主要有以下3种值可选:Dispatchers.Default(默认低并发)、Dispatchers.IO(较高并发)和Dispatchers.Main(不会开启子线程,而是在Android主线程中执行代码,但是这个值只能在Android项目中使用,纯Kotlin程序使用这种类型的线程参数会出现错误)。 | 只能在协程作用域调用。 | 
suspend关键字:使用它可以将任意函数声明成挂起函数,而挂起函数之间都是可以互相调用的。
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号