Kotlin DSL
Kotlin DSL 如何实现 DSL 高阶函数实现大括号调用 常见的 DSL 都会用大括号来表现层级。Kotlin 的高阶函数允许指定一个 lambda 类型的参数,且当 lambda 位于参数列表的最后位置时可以省略圆括号,满足 DSL 中的大括号语法要求。 // 原有代码: LinearLayout(context).apply { orientation = Line...
Kotlin DSL 如何实现 DSL 高阶函数实现大括号调用 常见的 DSL 都会用大括号来表现层级。Kotlin 的高阶函数允许指定一个 lambda 类型的参数,且当 lambda 位于参数列表的最后位置时可以省略圆括号,满足 DSL 中的大括号语法要求。 // 原有代码: LinearLayout(context).apply { orientation = Line...
Kotlin 协程 协程是什么?kotlinx.coroutines 是什么? 协程 (Coroutines) 是一个新的概念,但是协程这个术语早在 1958 年就被提出并用于构建汇编程序,协程是一种编程思想,并不局限于特定的语言,就像 Rx 也是一种思想,并不局限于使用 Java 实现的 RxJava。不同语言实现的协程库可能名称或者使用上有所不同,但它们的设计思想是有相似之处的。ko...
协程原理 suspend 原理 suspend 方法 示例代码: suspend fun susFun() { delay(100) println("hello suspend function.") } 反编译后: public static final Object susFun(Continuation<? super kotlin.Unit>...
Android 中协程 MainScope 作用域内协程都调度在主线程,除非明确声明了调度器 异常传播是自上而下的,出现异常,不会整个 scope 都异常了,其他的协程体可以继续执行 public fun MainScope(): CoroutineScope = ContextScope(SupervisorJob() + Dispatchers.Main) Main...
协程并发安全 不安全的并发访问 使用线程在解决并发问题的时候总是会遇到线程安全的问题,而 Java 平台上的 Kotlin 协程实现免不了存在并发调度的情况,因此线程安全同样值得留意。 @Test fun `test not safe concurrent`() = runBlocking<Unit> { var count = 0 List(1000) {...
协程取消和超时 协程取消 协程之间的关系 父协程手动调用 cancel() 或者异常结束,会立即取消它的所有子协程;取消协程作用域会取消它的子协程。 父协程必须等待所有子协程完成(处于完成或者取消状态)才能完成。 子协程抛出未捕获的异常时,默认情况下会取消其父协程。 抛出 CancellationException 或者调用 cancel() 只会取消当前协程和子协程...
协程挂起 什么是 suspend 挂起函数? 函数前面有 suspend 修饰符标记,这表示函数都是挂起函数。 suspend 函数特点 挂起函数可能会挂起协程 挂起函数使用 CPS style 的代码来挂起协程,保证挂起点后面的代码只能在挂起函数执行完后才能执行,所以挂起函数保证了协程内的顺序执行顺序。 fun postItem(item: Item) { Global...
协程异常处理 协程异常的传播 协程构建器有两种形式:⾃动传播异常(launch 与 actor)或向⽤户暴露异常(async 与 produce)。当这些构建器⽤于创建⼀个根协程时,即该协程不是另⼀个协程的⼦协程时: launch 和 actor 发生异常且非 CancellationException 异常的话,会传递给 UncaughtExceptionHandler 处理,...
协程启动 (协程上下文、启动模式、协程作用域) 协程上下文 CoroutineContext CoroutineContext 介绍 CoroutineContext,协程上下文,它是一个包含了用户定义的一些各种不同元素的 Element 对象集合。其中主要元素是: 协程的生命周期的句柄 Job 协程调度器 CoroutineDispatcher 协程的异常处理 C...
协程 coroutines 入门 https://developer.android.com/kotlin/coroutines https://github.com/dmytrodanylyk/coroutine-recipes 协程简介 协程是什么? 官方描述: 协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步...