公开标签 #Kotlin
协程关键字 CoroutineScope 协程的作用域 CoroutineDispatcher 协程的调度器 +CoroutineContext 协程上下文 挂起函数 概念:使用关键词suspend修饰。 delay 将当前协程挂起指定时间,但不会阻塞线程,必须在协程的作用域或者其他挂起函数中执行。 withContext 必须在协程的作用域中调用,必须指定协程的上下文,函数的最后一行是返回值。 GlobalScope.launch { withContext(Dispatchers.Default)
多平台项目是 Kotlin 1.2 中的一个新的实验性的功能,允许你在支持 Kotlin 的目标 平台——JVM、JavaScript 以及(将来的)Native 之间重用代码。在多平台项目 中,你有三种模块: 1,一个公共模块包含平台无关代码,以及无实现的依赖平台的 API 声明。 2,平台模块包含通用模块中的平台相关声明在指定平台的实现,以及其他平台相 关代码。 3,常规模块针对指定的平台,既可以是平台模块的依赖,也可以依赖平台模块。 当你为指定平台编译多平台项目时,既会生成公共代码也会生成平台相关
现在有支持在 Java 7 和 8 中新添加的 JDK API 的标准库的独立版本。 如果你需要访问新的 API,请使用 kotlin-stdlib-jre7 和 kotlin-stdlib-jre8 maven 构件,而不是标准的 kotlin-stdlib。 这些构件是在 kotlin-stdlib 之上的微小扩展,它们将它作为传递依赖项带到项目中。 字节码中的参数名 Kotlin 现在支持在字节码中存储参数名。这可以使用命令行选项 -java- parameters 启用。 常量内联 编译器现在将
Kotlin Map 上的扩展函数 getValue() 返回一个与给定键相对应的现有值,或者抛出一个异常,提示找不到该键。如果该映射是用 withDefault 生成的,这个函数将返回默认值,而不是抛异常。 fun main(args: Array<String>) { //sampleStart val map = mapOf("key" to 42) // 返回不可空 Int 值 42 val value: Int = map.getValue("key") val mapWithDefault
minOf() 和 maxOf() 函数可用于查找两个或三个给定值中的最小和最大值,其中值是原生数字或 Comparable 对象。每个函数还有一个重载,它接受一个额外的 Comparator 实例,如果你想比较自身不可比的对象的话。 fun main(args: Array<String>) { //sampleStart val list1 = listOf("a", "b") val list2 = listOf("x", "y", "z") val minSize = minOf(list1.s
Kotlin1.1的关键新特性是协程,它带来了future/await、yield以及类似的编程模式的支持。Kotlin的设计中的关键特性是协程执行的实现是语言库的一部分,而不是语言的一部分,所以你不必绑定任何特定的编程范式或并发库。 协程实际上是一个轻量级的线程,可以挂起并稍后恢复。协程通过挂起函数支持:对这样的函数的调用可能会挂起协程,并启动一个新的协程,我们通常使用匿名挂起函数(即挂起lambda表达式)。 我们来看看在外部库kotlinx.coroutines中实现的: // 在后台线程池中运行
Kotlin/Native 是一种将 Kotlin 编译为没有任何虚拟机的原生二进制文件的技术。 它 包含基于 LLVM 的 Kotlin 编译器后端以及 Kotlin 运行时库的原生实现。 Kotlin/Native 主要为允许在不希望或不可能使用虚拟机的平台(如 iOS、嵌入式领 域等)编译、 或者开发人员需要生成不需要额外运行时的合理大小的独立程序而设 计的。 Kotlin/Native 完全支持与原生代码的互操作。对于平台库,相应互操作库已可以开 箱即用。对于其他库,我们提供了一个由 C 语言头
Kotlin 非常适合开发服务器端程序,允许编写简明且表现力强的代码, 同时保持与现有基于 Java 的技术栈的完全兼容性以及平滑的学习曲线: 1, 表现力:Kotlin 的革新式语言功能,例如支持类型安全的构建器和委托属性, 有助于构建强大而易于使用的抽象。 2, 可伸缩性:Kotlin 对协程的支持有助于构建服务器端应用程序, 伸缩到适度的 硬件要求以应对大量的客户端。 3, 互操作性:Kotlin 与所有基于 Java 的框架完全兼容,可以让你保持熟悉的技 术栈,同时获得更现代化语言的优势。 4,
Kotlin(JVM) 中定义下面这样两个方函数时,编译器会报错 fun foo(value: List<String>) {} fun foo(value: List<Int>) {} Platform declaration clash: The following declarations have the same JVM signature (method(Ljava/util/List;)V): 因为 Java 的泛型编译期擦除,所以 JVM 无法识别签名中泛型的区别,认为这两个函数签名冲
协程还是 WorkManager? 协程会在您的应用进程活动期间执行。如果您需要执行一个能够在应用进程之外活跃的操作 (比如向远程服务器发送日志),在 Android 平台上建议使用 WorkManager。WorkManager 是一个扩展库,用于那些预期会在将来的某个时间点执行的重要操作。 请针对那些在当前进程中有效的操作使用协程,同时保证可以在用户关闭应用时取消操作 (例如,进行一个您希望缓存的网络请求)。那么,实现这类操作的最佳实践是什么呢? 协程的最佳实践 由于本文所介绍的模式是在协程的其它最