Kotlin协程
协程的作用域构建器
coroutineScope与runBlocking
- runBlocking是常规函数,而coroutineScope是挂起函数。
- 它们都会等待其协程体以及所有子协程结束,主要区别在于runBlocking方法会阻塞当前线程来等待,而coroutineScope只是挂起,会释放底层线程用于其他用途
文章作者: Carl Su
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 码行!
相关推荐

2022-05-06
Kotlin编程第一课--(基础篇)06 扩展:你的能力边界到底在哪里?
Kotlin 的扩展(Extension),主要分为两种语法:第一个是扩展函数,第二个是扩展属性。从语法上看,扩展看起来就像是我们从类的外部为它扩展了新的成员。 这在实际编程当中是非常有用的功能。我们可以来想象一个场景:我们想修改 JDK 当中的 String,想在它的基础上增加一个方法“lastElement()”来获取末尾元素,如果使用 Java,我们是无法通过常规手段实现的,因为我们没办法修改 JDK 的源代码。任何第三方提供的 SDK,我们都无权修改。 不过,借助 Kotlin 的扩展函数,我们就完全可以在语义层面,来为第三方 SDK 的类扩展新的成员方法和成员属性。不管是为 JDK 的 String 增加新的成员方法,还是为 Android SDK 的 View 增加新成员属性,我们都可以实现。 Kotlin 的这个“扩展”功能看起来很神奇,它会不会很难学?其实不然,它的语法非常简洁。今天这节课,我们就一起来学习下 Kotlin...
2022-07-10
Kotlin编程第一课(目录)
基础篇Kotlin编程第一课–(基础篇)01 Kotlin基础语法:正式开启学习之旅Kotlin编程第一课–(基础篇)02 面向对象:理解Kotlin设计者的良苦用心Kotlin编程第一课–(基础篇)03 Kotlin原理:编译器在幕后干了哪些“好事”?Kotlin编程第一课–(基础篇)04 | 实战:构建一个Kotlin版本的四则运算计算器Kotlin编程第一课–(基础篇)05 object关键字:你到底有多少种用法?Kotlin编程第一课–(基础篇)06 扩展:你的能力边界到底在哪里?Kotlin编程第一课–(基础篇)07 高阶函数:为什么说函数是Kotlin的“一等公民”?Kotlin编程第一课–(基础篇)08 实战:用Kotlin写一个英语词频统计程序Kotlin编程第一课–(基础篇)加餐一 初识Kotlin函数式编程Kotlin编程第一课–(基础篇)09 委托:你为何总是被低估?Kotlin编程第一课–(基础篇)10 泛型:逆变or协变,傻傻分不清?Kotlin编程第一课–(基础篇)11 ...

2023-01-17
2023-01-17-Kotlin协程 - 结构化并发
CoroutineScope定义协程必须指定其 CoroutineScope,它会跟踪所有协程,同样它还可以取消由它所启动的所有协程。 常用的相关API有: GlobalScope,生命周期是process级别的,及时Activity或Fragment已经被销毁,协程仍然在执行。 MainScope,在Activity中使用,可以在onDestroy()中取消协程。 viewModelScope,只能在ViewModel中使用,绑定ViewModel的生命周期。 lifecycleScope,只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期
2022-08-05
Kotlin函数
函数类型作为返回类型fun main() { println(show("Demo")) val lambdaFunction = showMethod("Jack") //注意lambdaFunction 这里的类型为(String,Int) -> String println(lambdaFunction("Carl",20))}//普通函数fun show(name:String): String { return "name is $name"}//返回类型为函数fun showMethod(name: String): (String,Int) -> String { println("name is $name") return { name: String, age: Int -> ...

2022-08-05
Kotlin内置函数apply、let、run、with、also等区别
Applyapply函数可看作一个配置函数,可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供lambda给apply函数执行,它会返回配置好的接受者 val file1 = File("/User/geowin/hello.txt")file1.apply { // this: File setWritable(true) setReadable(true) setExecutable(false)} 可以看到,调用一个个函数类配置接受者时,变量名就省略了,这是因为,在lambda表达式中,apply能让每个配置函数都作用于接受者,这种行为有时又叫做相关作用域,因为lambda表达式里的所有函数调用都是针对接收者的,或者说,它们是针对接受者的隐式调用. letlet函数能使某个变量作用于lambda表达式里,让it关键字能引用它。let与apply比较,let会把接受者传给lambda,而apply什么都不传,匿名函数执行完,apply会返回当前接受者,而let会返回lambda的最后一行。 fun...
2022-08-23
Kotlin嵌套类
嵌套类如果一个类只对另一个类有用,那么将其嵌入到该类并使这两个类保持在一起是合乎逻辑的,可以使用前套类 class Player2 { class Equipment(var name: String) { fun show() = println("equipment: $name") } fun battle() { }}fun main() { Player2.Equipment("knife").show()} 数据类 数据类,是专门用来存储数据的类 数据类提供了toString的个性化实现 ==符号默认情况下,比较对象就是比较它们的引用值,数据类提供了equals和hashCode的个性化实现 data class Coordinate(var x: Float, var y: Float) { var isInBounds = x > 0 &&...
评论
ValineDisqus