在 Kotlin 中使用 Android 的 Java API 时,您会迅速意识到这样的做法失去了 Kotlin 语言简单有趣的特点。与其您亲自去编写这些 API 的 wrapper 和扩展函数,不如了解一下 Jetpack KTX 库。目前为止,已有超过 20 个库拥有对应的 KTX 版本,这些 KTX 库实现了常用的 Java 版本 API 的功能,包括 Android 平台 API、ViewModels、SQLite,甚至还有 Play Core。本文会介绍目前可用的 KTX API 并深入其中去分析它们是如何实现的。
可发现性
为了提高 ktx 功能的可发现性,作为最佳实践,当某个 ktx 库可用时,总是导入并使用它。由于 -ktx 传递依赖非 ktx 软件包,您不需要添加其他软件包。举个例子,使用 viewmodel 时,您可以看到两个软件包: viewmodel 和 viewmodel-ktx。-ktx 软件包会包含 Kotlin 的扩展:
// 获取最新 Lifecycle 库的版本信息
// https://developer.android.google.cn/jetpack/androidx/releases/lifecycle
def lifecycle_version = "2.3.1"
// Java 实现
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// Kotlin 实现
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
始终导入 -ktx 软件包
要使用 Android 平台 API 的 Kotlin 扩展,导入 core-ktx 软件包即可。
// 获取最新 Core 库的版本信息
// https://developer.android.google.cn/jetpack/androidx/releases/core3def corektx_version = "1.3.2"
implementation "androidx.core:core-ktx:$corektx_version"
大部分 ktx 功能使用 扩展函数 实现的,您可以通过 Android Studio 中的自动完成功能找到它们。
其他功能,像 Color 类上可以使用的 解构 和 操作符重载 功能,可以访问 KTX 扩展程序列表 查看目前是否可以使用。
平台 API — core-ktx
core-ktx
为来自 Android 平台的 API 提供了常用的 Kotlin 功能。
例如,您正在使用 SharedPreferences
,当您想去更新一个值,不需要像使用 Java 一样执行 3 个调用,您只需要执行一个调用即可:
/* Copyright 2020 Google LLC.
SPDX-License-Identifier: Apache-2.0 */
- val editor = sharedPreferences.edit()
- editor.putBoolean(SHOW_DELETED_WORDS_KEY, enable)
- editor.apply()
+ sharedPreferences.edit {
+ putBoolean(SHOW_DELETED_WORDS_KEY, enable)
+ }
</