61 天前 / Android_开发者
写文章 Kotlin Vocabulary | Kotlin 委托代理谷歌开发者已认证的官方帐号 8 人赞同了该文章有时候,完成一些工作的方法是将它们委托给别人。这里不是在建议您将自己的工作委托给朋友去做,而是在说将一个对象的工作委托给另一个对象。 当然,委托在软件行业不是什么新鲜名词。委托 (Delegation)是一种设计模式,在该模式中,对象会委托一个助手 (helper) 对象来处理请求,这个助手对象被称为代理。代理负责代表原始对象处理请求,并使结果可用于原始对象。 Kotlin 不仅支持类和属性的代理,其自身还包含了一些内建代理,从而使得实现委托变得更加容易。
83 天前 / 携程技术
作者简介 禹昂,携程机票移动端资深工程师,Kotlin 中文社区核心成员,图书《Kotlin 编程实践》译者。 一、前言 1.1 技术背景与选型 自 2017 年 Google IO 大会以来,经过三年的发展,Kotlin 已成为 Android 平台无争议的首选开发语言。但是相比语言本身,Kotlin 1.2 版本后进入 stable 状态的协程(coroutines)的行业采用率仍然较低。 协程的优势主要有: 更简单的异步并发实现方式(近似于同步写法) 更便捷的任务管理 更便捷的生产者 - 消费者模式实现 更高效的 cold stream 实现(即 Flow,根据官方数据...
83 天前 / Android_开发者
写文章开始切换到 Kotlin: 谷歌工程师给初学者的知识点总结谷歌开发者已认证的官方帐号 15 人赞同了该文章在 2019 年的 I/O 大会上,我们曾宣布 Kotlin 将会是 Android 应用开发的首选语言,但是,部分开发者们反馈仍不清楚如何切换到 Kotlin,如果团队中没有人熟悉 Kotlin,一开始直接使用 Kotlin 进行项目开发还是会令人生畏。 在 Android Studio Profiler 团队内部,我们是通过几个步骤克服了这个问题,第一步是要求所有的单元测试使用 Kotlin 编写。
89 天前 / openio
Kotlin 协程在 Kotlin1.1-1.2 版本中还是实验性质的,在 Kotlin 1.3 版本开始提供了一个稳定版本,越来越多的开发者开始使用 Kotlin 协程。那么 Kotlin 协程是什么? Kotlin 协程是一套基于 Java Thread 的线程框架,相较于 Java Executor 及 RxJava 等线程框架可以更方便的实现异步调用,很容易实现线程切换。Kotlin 协程另外一个核心的功能是非阻塞式挂起,它帮助开发者消除了回调,可以使用同步的代码写出异步的操作,当然也就消除了一些业务场景的回调地狱。
111 天前 / Tony沈哲
pexels-thegiansepillo-3714421.jpg 一。 R2DBC 介绍在 R2DBC 官网 (http://r2dbc.io/) 上,对 R2DBC 有一句话的介绍: The Reactive Relational Database Connectivity (R2DBC) project brings reactive programming APIs to relational databases. R2DBC 的含义是 Reactive Relational Database Connectivity,它是一个使用响应式驱动程序集成关系数据库的孵化器。它是在响应式编程的基础上使用关系数据访问技术。 R2DBC 最初是一项实验和概念验证,旨在将 SQL 数据库集成到使用响应式编程模型的系统中。
114 天前 / Tony沈哲
pexels-lina-kivaka-3881172.jpgKotlin 的智能推断是其语言的一大特色。 智能推断,能够根据类型检测自动转换类型。 但是,智能推断并没有想象中的强大,例如下面的代码就无法进行推断,导致编译失败: fun String.isNotNull():Boolean {return this!=null && this.isNotEmpty()}fun printLength(s:String=null) {if (!s.isNotNull()) {println(s.length) // Only safe (.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String}}因为编译器在处理 s.length 时...
119 天前 / Android_开发者
写文章在 Kotlin 中使用 Dagger 会遇到的陷阱和优化方法谷歌开发者已认证的官方帐号 12 人赞同了该文章 Dagger 在 Android 开发中相当流行,它是一个提供完全静态和在编译时生成代码的依赖注入框架,它解决了很多基于反射而实现的方案中所遇到的开发和性能问题。 为了让您更好地了解 Dagger 的工作原理,我们于 2019 年发布了一个 新的教程。本文将重点介绍如何 在 Kotlin 中使用 Dagger ,包括优化构建时间的 最佳实践 以及一些可能会遇到的问题。
125 天前 / Android_开发者
写文章 Kotlin Vocabulary | 操作符重载谷歌开发者已认证的官方帐号 4 人赞同了该文章当我们在处理可以添加、删除、比较或者连接的类型时,我们通常需要写很多冗长和重复的代码。但在 Kotlin 中,我们可以借助 操作符重载,为这些类型写出更具表现力和简洁的代码。 我除了喜欢 Android,还喜欢在合唱团里唱歌,所以就让我们用合唱团的例子来说明操作符重载的好处。假设有一个由歌手组成的合唱团,我们想在合唱团中增加一名歌手,代码如下: class Choir {private val singers = mu...
134 天前 / Tony沈哲
pexels-sobhan-joodi-3215050.jpg 一。 集合中的函数式 API 虽然 Kotlin Collection 中的函数式 API 类似于 Java 8 Stream 中的 API。但是 Kotlin 的集合跟 Java 的集合并不一致。 Kolin 的集合分为可变集合 (mutable collection)和不可变集合 (immutable collection)。不可变集合是 List、Set、Map,它们是只读类型,不能对集合进行修改。可变集合是 MutableList、MutableSet、MutableMap,它们是支持读写的类型,能够对集合进行修改的操作。 Kotlin 集合中的函数式 API 跟大部分支持 Lambda 语言的函数式 API 都类似。
140 天前 / 琥珀川
首发于 Android 之道写文章 Kotlin 高阶扩展函数:理解 let、with、run、apply、also 函数琥珀川58 同城 Android 工程师前言为了方便开发者更加友好的代码编写,kotlin 提供了高阶扩展函数 let,with,run,apply。在理解之前,需要我们理解 扩展函数 与 高阶函数 的概念。 扩展函数 Kotlin 能够扩展一个类的新功能而无需继承该类或者使用像装饰者这样的设计模式。 这通过叫做扩展的特殊声明完成。如我们想为 String 类型扩展一个打印方法,直接定义一个扩展函数即可,无需通过集成的方式去扩展。
154 天前 / openio
WorkManager 是一个 Android Jetpack 扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。对于绝大部分后台执行任务来说,使用 WorkManager 是目前 Android 平台上的最佳实践。 WorkManagerhttps://developer.android.google.cn/topic/libraries/architecture/workmanager/Android Jetpackhttps://developer.android.google.cn/jetpack/ 目前为止 WorkManager 系列已经讨论过: Android Jetpack WorkManager | Android 中文教学视频 在这篇文章中...
161 天前 / Android_开发者
写文章Kotlin 协程和 Android SQLite API 中的线程模型谷歌开发者已认证的官方帐号7 人赞同了该文章从 Room 2.1 版本之后,开发者们可以通过定义 suspend DAO 函数来使用 Kotlin 协程了。协程在处理异步操作时表现得异常优秀,它可以让您用顺序自然的代码处理诸如操作数据库一类的耗时操作,而不再需要专门在线程之间来回切换任务、处理结果或错误了。Room 支持协程后,可以在数据库操作中使用由并发作用域、生命周期、嵌套所带来的一些便利。 在我们为 Room 添加协程的支持期间,我们遇到并解决了在协程模型和 Android SQL API 中没想到的一些问题。
182 天前 / Tony沈哲
pexels-nguyn-xuan-trung-899737.jpg一. data class 的 copy() 为浅拷贝浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。 深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。
198 天前 / Tony沈哲
pexels-pixabay-157606.jpg 一。 开发背景我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设备实现业务上的操作。从 Web 后台到桌面端是通过一个 WebSocket 长链接来进行维护,而桌面程序到各个硬件设备也是一个 TCP 长链接来维护的。 本文讲述的,其实是从桌面程序到各个硬件之间的通讯。 二。 自定义通讯协议首先,需要设计一个通用的 TCP 网络协议。 网络协议结构如下 +--------------+---------------+------------+---------------+-----------+----------+| 魔数 (4) | version(1)...
209 天前 / 街道-书记撸代码
Kotlin 协程让我们可以用同步代码来建立异步问题的模型。这是非常好的特性,但是目前大部分用例都专注于 I/O 任务或是并发操作。其实协程不仅在处理跨线程的问题有优势,还可以用来处理同一线程中的异步问题。 我认为有一个地方可以真正从中受益,那就是在 Android 视图系统中使用协程。 Kotlin 协程 https://developer.android.google.cn/kotlin/coroutines Android 视图 回调 Android 视图系统中尤其热衷于使用回调:目前在 Android Framework 中,view 和 widgets 类中的回调有 80+ 个...