对于大部分人,学习协程的目的是使用协程,Kotlin 官方的协程框架也是采用这种风格,因此完成了自己打造的框架,对于官方 API 的理解可以提升一个层次,再使用的话自然手到擒来了。源码在每一章节的开头(如果有必要的话)delay 函数CoroutineA 的目标是只使用协程标准库,即到不导入任何 kotlinx.coroutines 包。一个非常方便的函数 delay() 其实属于 kotl...
对于大部分人,学习协程的目的是使用协程,Kotlin 官方的协程框架也是采用这种风格,因此完成了自己打造的框架,对于官方 API 的理解可以提升一个层次,再使用的话自然手到擒来了。源码在每一章节的开头(如果有必要的话)delay 函数CoroutineA 的目标是只使用协程标准库,即到不导入任何 kotlinx.coroutines 包。一个非常方便的函数 delay() 其实属于 kotl...
.gist-file .gist-data {max-height: 400px;max-width: width:100%;}上一节我们已经了解的 Kotlin 协程的基础设施,同时也强调了这些不是面向开发者的,需要经过一些封装才适用于生产。诚然,一般情况下开发者不用学习这些,只需要知道 kotlinx 为我们封装好的框架如何使用就行了。不过既然叫深入 Kotlin 协程,当然不能那么浮...
什么是泛型泛型本质上是一个确保类型安全的手段,它属于那种没有也罢有则更佳的特性。泛型几乎没有扩展 Java 能力的边界,而是提高了编码效率与可维护性,减少模板代码并降低出错机率。这么说的原因是使用 Object 就可以传递任意数据,没有必要使用泛型。所有写 Java 的人都离不开泛型,比如 List<String> 但主动写一个泛型类的人就不多了,其中一个原因是对泛型的能力缺乏清...
如无特殊说明,本系列中「协程」默认特指 Kotlin 协程的 JVM 实现。什么是协程好吧...这真是一个极度刁钻困难的问题。哪怕限定于 Kotlin@JVM 中,也难以回答。困难到两位 GDE bennyhuo 霍丙乾与扔物线朱凯竟给出了矛盾的答案。当然,只是字面描述上的矛盾,思想上还是一致的。我目前的答案是:协程就是程序自己调度的线程:它有一个函数体作为协程体,由应用程序自己决定何时执行...
⚠️ 源码根据使用场景定制,为最大化效率没有使用抽象等结构,如需使用请酌情优化。需求由于项目需求,需要在低性能设备高频率地解析计算数学表达式,所以重量级的比如词法分析,语法分析,抽象语法树🌲三件套就不太合适了。(当然也不是不行,只是有点大材小用,而个人能力又有限,对于ANTLR调优之类不太擅长)说起数学公式解析,当然离不开老朋友逆波兰表达式,也就是后缀表达式,他能忽略括号等优先级问题,按照顺...
如果还不清楚什么是依赖注入,那么请参考之前写的 Dagger2 in Android(一)通俗基础开头部分。如果你不了解 Dagger 倒也无妨,本文会进行一定的对比,但仅针对接触过 Dagger 的同学,否则大可以忽略。Dagger2 作为著名优秀的依赖注入框架广为流传,何况还是 Android 的亲爸爸 - Google 在维护,因此相信很多人会将其作为 Android 开发的首选 DI...
使用协程解决实际问题前两章重点研究了协程如何简化代码,在 Android 中提供主线程安全,以及如何避免协程泄露。在此基础上,协程是一个在 Android 中进行后台处理以及以及简化回调的优秀方案。到目前为止,我们主要关注的是什么是协程以及如何管理它们。在这篇文章中,我们将看看如何使用它们来完成实战任务。协程是一个通用的语言特性,与函数在同一个级别——你可以用它实现任何可以用函数或对象来实现...
本篇将开始整合协程与 Android,探索如何启动并跟踪协程,以便适配 UI 生命周期。为何跟踪协程在第一篇中,我们探索了协程能解决的问题。总结一下,协程是解决这两个问题的优秀方案:在主线程运行长时间任务导致阻塞。从主线程上安全地调用一切 suspend 函数。也即主线程安全(Main-safety)为了解决这些问题,协程通过给常规函数添加 suspend 与 resume 操作,使得协程被...