乐趣区

关于android:回顾-Android-Jetpack-重要更新

Android Jetpack 汇合了一系列的开发库,旨在帮忙开发者更容易地创作高质量的利用,同时也更好地兼容老旧版本的 Android 零碎。在正式公布 Jetpack 两年后的明天,咱们曾经看到大量的利用开发开始采纳 Jetpack 中的开发库,这其中既包含大型开发团队的产品,也有那些刚起步的利用。而这所有仅仅是开始,因为近期咱们公布了一系列新的开发库,以及过来一年咱们对于现有开发库的重要更新。

在往年的谷歌开发者大会上,咱们也为大家介绍了 Jetpack 的重要更新,视频如下:

https://www.qq.com/video/o320…

您也能够 查看这里 到大会官网查看本视频和更多视频分享。

公布到 Alpha 版本的库

Hilt — Jetpack 官网举荐的依赖注入开发库

Hilt 是一个新的 Android 开发库,它能够帮忙利用开发更容易地实现 依赖注入。Hilt 让您只需思考申明和注入绑定中的重要局部,而不用放心治理依赖注入的初始化和连贯等局部。

Hilt 是基于 Dagger 开发的,也同样受害于其编译期错误诊断、改进的运行时性能以及良好的可扩展性。Hilt 曾经集成了对 Jetpack 开发库和 Android 零碎类库的反对。举个例子,为了注入 ViewModel 参数,能够应用 @ViewModelInject 注解 ViewModel 的构造函数,而后应用 @AndroidEntryPoint 来注解 Fragment:

<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

class SearchViewModel @ViewModelInject constructor(private val repository: SearchRepository): ViewModel() { …}

@AndroidEntryPoint
class SearchFragment : Fragment() {val viewModel: SearchViewModel by viewModels()
}

请从咱们 公布的博客文章 中理解更多对于 Hilt 以及其相干资源。

Paging 3 — 分页加载显示数据内容

Paging 开发库能够帮忙分页加载显示数据内容。咱们公布了应用 Kotlin 的协程 重写的 Paging 3。新版本增加了一些呼声较高的新性能,比方分隔符、标头和页脚,以及数据转换。此外,新版本还增加了用来监控列表加载状态的一系列的 API,以及重试和刷新的办法等。

举个例子,应用 Paging 3,咱们能够通过继承 PagingSource 类来定义数据源,并实现 load 这个挂起函数,该函数能够间接执行其余的挂起函数:

<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

class MyPagingSource : PagingSource<Key, Value>() {override suspend fun load(params: LoadParams<Key>): LoadResult<Key, Value> {
        try {val result = api.requestPage(params.key)
            return Page(
                data = result.items,
                nextKey = result.nextKey
            )
        } catch(error: IOException) {return Error(error)
        }
    }
}

点击 此处 获取更多 Paging 3 的相干信息。

App Startup — 在利用启动时初始化组件

App Startup 开发库提供了一种相当间接且高效的形式,来帮忙程序在启动过程中初始化组件。不同于以往须要独自为每个须要初始化的组件定义 ContentProvider,App Startup 能够利用一个共享的 ContentProvider 来同时定义多个组件的初始化操作,这样能够无效放慢利用启动速度。

上面的例子展现了如何利用 App Startup 来优化 WorkManager 的初始化工夫,底层的实现是 App Startup 应用了一个共用的 ContentProvider,并代替了 WorkManager 自有的 ContentProvider:

<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

// Initializes WorkManager.
class WorkManagerInitializer : Initializer<WorkManager> {override fun create(context: Context): WorkManager {val configuration = Configuration.Builder().build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }
    override fun dependencies(): List<Class<out Initializer<*>>> {return emptyList()
    }
}

点击 此处 获取更多无关 App Startup 的信息。

输入法集成主动填充性能

Android 11 为软键盘引入了一系列零碎 API 来显示主动填充内容,并且提醒内容能够来自其余利用,比方明码管理器。Jetpack 的 Autofill API 通过其 InlineSuggestionUi 类,让键盘和主动填充服务能够更好地利用新个性。其中主动填充服务能够利用这个类创立更适合的提醒内容,而键盘能够利用这个类更好地定制主动填充的外观。

△ 软键盘显示信用卡号码主动填充内容

利用 core-animation 和 SeekableAnimatedVectorDrawable 来轻松创立动画

为了更轻松地实现和测试动画,咱们减少了两个新的开发库,别离是 androidx.core:core-animation 和 androidx.core:core-animation-testing。同时咱们也引入了一个新的 API SeekableAnimatedVectorDrawable 作为 androidx.vectordrawable 开发库的一部分。

core-animation 兼容所有自 Android 4.0 之后的新 Animator API,包含 pause (暂停)、resume (复原) 和 seek (查找)。

SeekableAnimatedVectorDrawable 基于 core-animation 开发,它是 AnimatedVectorDrawable (AVD) 可代替计划。它应用与 AVD 同样的文件格式,并且新增了 seek (查找)、pause (暂停) 和 resume (复原) 的性能。Seekable AVD 临时不能够利用渲染线程,所以只有当急需该类新个性的时候才举荐应用。

利用 Android Studio 的数据库查看器来调试数据库

△ 在 Android Studio 中应用数据库查看器

有了 Android Studio 4.1 新增的 Database Inspector,数据库调试变得非常简略。这个工具能够在正在运行的利用中查看、检索以及批改数据库的内容。无论是应用 Room 还是间接应用 SQLite,您都能够通过菜单栏中的 View > Tool Windows > Database Inspector 开始调试数据库。请通过咱们的文章《期待已久的动静数据库工具终于来了!》理解更多对于这个工具的内容以及如何应用它。

WindowManager — 更好地反对新的设施状态

WindowManager 是一个新退出到 Android Jetpack 中的开发库,其旨在帮忙开发者更好地反对新的屏幕类型,比方折叠屏、多分屏等。该库为新老版本不同的 WindowManager 性能提供了一个对立的 API 接口。

初始的公布版本提供了对于市面上已有以及行将上市的不同可折叠设施的反对,开发者能够利用其适配所有不同类型的硬件配置。理解更多相干内容,请查阅 博客文章 和 示例工程。

MotionLayout — 为 Android 创立晦涩的可交互动画

MotionLayout API 在 ConstraintLayout 丰盛性能的根底上,能够帮忙 Android 开发者开发简单的动画成果。应用 MotionLayout,开发者既能够轻松地在 ConstraintSets 之间设置过渡动画,也能够不便地将动画集成到罕用的视图组件中,比方 RecyclerView、ViewPager 等。Android Studio 4.0 还蕴含了一个可视化的动效编辑器,它能够用来创立和预览基于 MotionLayout 的动画。

△ 在动效编辑器中创立、编辑和预览 MotionLayout 动画

对于已有开发库的更新

Navigation 库

Navigation 2.3 新增了对于 Dynamic Delivery 功能模块 的反对,该性能能够让用户只下载须要的局部,从而大大降低利用的初始下载体积。另外,您能够像导航到根底模块一样导航到动静功能模块。除此之外,深层链接当初既反对检索参数,也反对自定义的 action 和 mime 类型。

同时新增了一个能够 返回后果 的 API,通过它能够在 SavedStateHandle 中查问和设置所有回退栈的入口。新增的 TestNavHostController 能够让您拜访 Navigation 回退栈,并且在测试中设置以后的目的地。

WorkManager 库

最新公布的 WorkManager 反对了那些须要长时间运行的 Worker 或者应被操作系统放弃运行在前台的服务。

为了让 WorkManager 工作调试更简略,咱们新增了一个诊断 API。这个 API 能够让开发者监控 WorkManager 的外部状态,并且在 logcat 中打印出该状态的具体信息:

Recently completed work:
Id Class Name Job Id State Unique Name Tags
88e31476–50d5–4a3a-855a-7c158d61543e com.example.DiagnosticsWorker null SUCCEEDED com.example.DiagnosticsWorker
939d3d81–4a24–4920-ab6a-2a5b850f377b com.example.ToastWorker null SUCCEEDED com.example.ToastWorker
59ab8eb1–2645–446d-8811–1e7b887ab5bc com.example.ForegroundWorker null CANCELLED com.example.ForegroundWorker
7a6c23d2-a1f9–4477-af77–1f16b45cd765 com.example.ForegroundWorker 0 SUCCEEDED com.example.ForegroundWorker

Running work:
Id Class Name Job Id State Unique Name Tags
7c8bc01f-a60c-4b63-a6aa-2055d4d9d88e com.example.DiagnosticsWorker 4 RUNNING com.example.DiagnosticsWorker

△ WorkManager 诊断后果示例

为了帮忙您防止在应用 WorkManager 时遇到一些常见谬误,咱们同时还新增了 Lint 规定来标识它们。另外还有一些 API 的更新,包含反对设置和察看 Worker 的两头进度、一些对于以后 Worker 查问 API 的优化、一些对于进行中的工作器的调度优化。

Benchmark 库

△ 在 Android Studio 中查看抽样的堆栈信息

Benchmark 库公布的 alpha release: 1.1.0-alpha01 版本中集成了 CPU 性能分析工具,该工具能够帮忙开发者剖析利用性能基准测试后果,并且能够在 Android Studio 中间接查看相干办法和抽样的堆栈信息。咱们同时还增加了对于内存调配的追踪,以便于开发者能够优化内存调配和垃圾回收所耗费的工夫。

权限库 (Permissions)

为了更不便地管理权限,咱们引入了一系列新的 ActivityResult API。这些 API 能够用 RequestPermission contract 来替换 requestPermissions),以简化权限申请的开发。除此之外,这些 API 还为一些常见的 intent 提供了类型平安的 contract,比方 选取图片 和提醒用户 关上一个文件。

游戏 SDK

今年初刚公布的 Android 游戏 SDK 现在也作为 Jetpack 的一部分在 Google Maven 仓库上线。该 SDK 提供一个 帧同步 API 和 Android 性能调优器。请通过 官网文档 获取更多无关游戏 SDK 的内容。

CameraX 库

因为 Android 设施的多样性,市面上有太多的不同品种的相机硬件,而 CameraX 能够兼容市面上 90% 的设施。从二月份 CameraX 公布 Beta 版本 至今,咱们始终致力于晋升可靠性,以确保 API 在各种设施上都领有更好的行为。咱们的 CameraX 测试实验室也在一直地针对不同机型进行自动化测试,以最大水平地兼容市面上超过 4 亿台的设施。

在 最近的版本 中,CameraX 引入了对于 PreviewView 组件的优化。该组件现在能够更好地解决利用生命周期和 ViewPager。该组件底层会在反对的设施上主动应用 SurfaceView 以最大水平地获取性能上的优化,这也帮忙其应用更少的缓存以及更低电量的耗费。

要理解更多对于 CameraX 的内容,请参阅咱们详尽的 CameraX 文档 和 示例工程,以及咱们过来推送的文章《[应用 PreviewView 来展现相机预览]()》。

Security 库

Jetpack 的 Security 库为 基于文件加密形象层的应用提供了平安简便的办法,比方 EncryptedFile 和 EncryptedSharedPreferences。Jetpack 的 Security 开发库利用 Android 的 Keystore,以提供基于硬件存储空间和相干操作的平安。Jetpack 的 Security 开发库 现在为 Android 6.0 当前的零碎公布了 RC 版本 (最新版本为 RC3),并且为 Android 5.0 当前的零碎提供了 1.1.0 alpha 版本。

AppCompat 库

AppCompat 库提供了大量向前兼容的 UI 组件和零碎性能,从 Material 主题到 Toolbar 等组件,再到深色主题。在 最新的公布 中,咱们新增了 Lint 规定,这有利于开发者分别哪些属性来自于 AppCompat 以及哪些来自于零碎框架,并保障您应用了正确的属性。此外,咱们还针对 AppCompat 中深色主题实现的稳定性进行了大量优化。

Webkit 库

Jetpack 的 Webkit 开发库在 1.2.0 版本 (最新版为 1.4.0-rc01) 中新增了一个强制应用深色主题显示内容的 API。应用这个 API 的时候,如果网站反对深色主题,WebView 会主动地应用深色主题渲染该站点。如果网站不反对深色主题,这个 API 会强制转换其中的一些色彩。

Jetpack Compose — 全新的 Android UI 开发框架

Jetpack Compose 是全新的古代 Android UI 开发框架,目前公布了开发者预览第二版。新版本增加了许多新性能,包含视图组件的互通性、更多的 Material UI 组件、反对深色主题、新的 UI 测试和动画 API、对于 ConstraintLayout 的反对、优化状态治理、集成可察看的数据流和 RTL 反对。Android Studio 预览当初是可交互的,并且还有很多编译器方面的优化。您能够查阅咱们的 Alpha 版本公布文章、深刻详解 Jetpack Compose 之 优化 UI 构建 和 实现原理 等文章理解更多。

获取更多的更新内容,请观看视频上面视频理解 Jetpack Compose,欢送大家尝试这些新的更新并 向咱们反馈。

https://www.bilibili.com/vide…

本文概括了 Jetpack 过来几个月的更新。因为其包含了超过 90 个开发库,咱们晓得想找到您所关怀的内容并非易事。为了帮忙开发者,咱们 从新设计了 Jetpack 网站,并且在大量更新之余新增了一个便捷的 API 选取器,能够帮忙开发者更快捷的找到 Jetpack 中适合的开发库来解决问题。

退出移动版