Jetpack 重磅更新!

原文作者:Florina Muntenescu
原文地址:https://medium.com/androiddevelopers/whats-new-in-jetpack-1891d205e136
译者:秉心说

恩…jetpack 发布了一波更新,另外上周 Android 11 Beta 也正式对外发布了,所以…我们…好像又要面临一波知识到来了。

当然了,大家先做简单了解即可,有相关哪些技术特别优秀,后续也会有专门的实践教程推送给大家的。

本来准备提早些给大家推送的 ,一直被我拖到现在…

要想成为一名优秀的Android开发,一份 知识体系 是必不可少的~

概述

Android Jetpack 是一套帮助你轻松构建高质量应用,兼容旧版本系统的类库套件。在 Jetpack 发布两年之后的现在,我们已经看到了很多 app 的广泛采用,并且更多的开发者开始使用了。这只是一个开始:今天,我们将发布过去一年的工作成果,一些新的类库以及现有类库的重大更新。

New in Alpha

Hilt - Jetpack 推荐的依赖注入类库

译者注:前几天掘金有一篇介绍 Hilt 的文章 神一样的存在,Dagger Hilt !! ,看评论区很多读者仍然把它当成 Dagger 。

其实官方也知道 Dagger2 难用,学习曲线陡峭,所以有了 Hilt,一个基于 Dagger2 的为 Android 准备的依赖注入类库。

https://juejin.im/post/5edb5ef3f265da76c76b17d8

Hilt 是一个帮助你简化 依赖注入 操作的 Android 类库,它让你可以专注于定义和注入的重要部分,而无需担心管理所有的 DI 设置。

基于 Dagger 之上,Hilt 继承了它的编译期正确性,也提升了运行时性能和可扩展性。Hilt 增加了对 Jetpack 类库和 Android Framework 类的集成。例如,要注入 ViewModel 的参数的话,你可以在 ViewModel 的构造函数上添加 @ViewModelInject 注解,并在 Fragment 上添加 @AndroidEntryPoint 注解。

<!-- 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()
}

在我们发布的博客 Dependency Injection on Android with Hilt 中,可以了解 Hilt 的更多信息。

https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67b6031e62d

Paging3 - 逐步加载和显示数据

Paging 是一个帮助你逐步分块加载和显示数据的类库。

今天我们发布了 Paging3 ,使用 Kotlin Coroutines 完全重写。这个版本添加了呼声很高的新特性,例如分隔符,header,footer,列表转换,用于重试和刷新的观察列表加载状态的 API 。

通过 Paging3 ,数据源可以继承 PagingSource ,并实现 suspend 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)
        }
    }
}

关于 Paging3 的更新信息,请查看 文档 和 codelab 。

http://d.android.com/paging3

https://codelabs.developers.google.com/codelabs/android-paging/#0

译者注:视频里有提到,Paging3 是兼容 Paging2 的,大家可以放心升级(我不负责。。) 。

App Startup - 在应用启动时初始化组件

App Startup 类库提供了一种简单高效的方法在应用启动时初始化组件,而不是为每个需要初始化的组件定义单独的 ContentProvider 。

App Startup 允许你定义共享同一个 ContentProvider 的组件初始化器。这可以显著优化应用启动时间。

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

class WorkManagerInitializer : Initializer<WorkManager> {
    override fun create(context: Context): WorkManager {
        val configuration = Configuration.Builder()
            .setMinimumLoggingLevel(Log.DEBUG)
            .build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }

    override fun dependencies() : List<Class<out Initializer<*>>> = emptyList()
}

关于 AppStart 的更多信息,请查看 官方文档 。

https://developer.android.com/topic/libraries/app-startup

Auto-fill IME

Android 11 引入了键盘相关的平台 API ,用于展示自动填充建议,例如密码管理。Jetpack 的 AutoFill API 通过 InlineSuggestionUi 使得键盘和自动填充服务更简单的使用这一特性。

AutoFill 服务通过它可以提供可靠的建议,键盘通过它可以自定义建议的样式。

更简单的动画 — core-animation 和 SeekableAnimatedVectorDrawable

为了更简单的实现和测试动画,我们添加了两个新类库:androidx.core:core-animation和 androidx.core:core-animation-testing .

我们还在 androidx.vectordrawable 库中引入了新的 API SeekableAnimatedVectorDrawable 。

core-animation 移植了 Animator 自 Ice Cream Sandwich 依赖的所有特性,例如 暂停/恢复,拖动。

SeekableAnimatedVectorDrawable 是一个基于 core-animation 的全新的,可拖动的,AnimatedVectorDrawable(AVD) 的替代方案。它和 AVD 使用同样的格式,并添加了拖动,暂停,恢复的功能。

使用 Database Inspector 调试数据库

这块我就不翻译了,我两个月前的文章就介绍过了,可以查看一下 数据库还能这么看 ?

WindowManger - 更好的设备支持

WindowManager 是 Jetpack 新增加的类库,旨在帮助开发者适配各种不同的设备,例如折叠屏。它为新旧平台版本的 WindowManger 特性提供了统一的 API 支持。

支持不同类型的可折叠设备的初始版本已经投入市场,所以开发者可以进行适配了。更多信息可以查看这篇博客:

Support New Form Factors with the new Jetpack WindowManager Library

https://medium.com/androiddevelopers/support-new-form-factors-with-the-new-jetpack-windowmanager-library-4be98f5450da

示例代码

https://github.com/android/user-interface-samples/tree/master/WindowManager

译者注:掘金上也有一篇相关文章,可以参考:Jetpack WindowManager,Android 折叠屏官方适配方案!

https://juejin.im/post/5ecb2e2f518825433e1fa377

MotionLayout,构建流畅的交互式动画

MotionLayout 继承了 ConstraintLayout 的丰富特性,帮助 Android 开发者管理复杂的运动和窗口组件动画。通过 MotionLayout ,你可以在 ConstraintSets 之间构造过渡动画,并且可以轻易的集成通用 View 的动画,像 RecyclerView 和 ViewPager 。

Android Studio 4.0 支持了 Motion Editor,用于创建和预览 MotionLayout 动画的图形工具。

升级现有类库

Navigation

Navigation 2.3 增加了对 dynamic feature modules(动态功能模块) 的支持,允许用户仅下载应用中需要的模块,大大降低了首次下载的 Apk 大小。

现在,你可以导航到这些模块,就好像本身就是 base apk 的一部分一样。除了允许查询参数之外,Deep link 现在还支持自定义 action 和 mime type 。

返回结果 有了新的 API,Navigation 使用 SavedStateHandle 在目标之间传递数据。你可以使用先前的 BackStackEntry 并在上面设置返回值。

新的 TestNavHostController 帮助你在测试中访问回退栈并设置当前 destination 。

WorkManager

最新版本的 WorkManager 通过前台服务增加了对需要保持存活的耗时和重要任务的支持。

为了更轻松地诊断 WorkManager 任务中的问题,我们新增了 Diagnostics API 借助 adb 你查看内部工作状态并输出到 logcat 。

adb shell am broadcast \
 -a "android.work.diagnostics.REQUEST_DIAGNOSTICS" \
 -p "<your_app_package_name>"

为了帮助你避免 WorkManager 使用过程中的常见错误,我们已经添加了一些 Lint 规则来标记他们。

其他的一些 API 更新包括:支持设置和观察 工作进度 ;优化对当前工作的查询 API;改进正在运行的 scheduler 。

Benchmark

Benchmark 库的最新 alpha 版本与 CPU profiling 整合在了一起,这样就可以对基准测试进行分析,然后直接在 Android Studio 中查看方法或采样的 trace 。

我们还增加了对内存分配跟踪的支持,这样你就可以优化分配所花的时间并减少了很多垃圾回收。

Permissions

我们引入了新的 ActivityResult API ,使得权限请求更加简单。

新的 API 使用 RequestPermissionContract 代替原来的 requestPermissions 方法,大大简化了权限申请流程。

同时对一般的 intent 提供了类型安全的协议,例如 拍照 和 打开文档 。

https://developer.android.com/training/basics/intents/result

CameraX

安卓设备上的相机有很大差异,CameraX 兼容了 90% 的设备。自从去年 2月份 CameraX 进入 Beta 以来,我们专注于可靠性以确保 API 在大量设备上具有良好表现。CameraX 测试实验室在超过 4 亿活跃设备上运行了我们的自动测试套件。

最新版本的 CameraX 带来了 PreviewView 组件的优化。现在它可以可靠的处理与应用生命周期的交互以及页面的交互。它还透明的优化了你的设备,在设备底层使用 SurfaceView ,有益于提升性能表现,减少缓冲和提供电源效率。

更多内容请查看 官方文档 和 代码示例 。

https://developer.android.com/training/camerax

https://github.com/android/camera-samples

Security

Jetpack Security 类库提供了安全易用的基于文件的加密接口,例如 EncryptedFile和 EncryptedSharedPreferences 。

Jetpack Security 利用 Android KeyStore 的优势,提供硬件支持的存储和操作安全性。Release Candidate 2 版本现在支持 Marshmallow+ 版本,1.1.0 alpha 版本支持 Lollipop+ 以上版本。

https://developer.android.com/jetpack/androidx/releases/security

AppCompat

AppCompat 移植了大量 UI 元素和平台特性,如 Material 主题, Toolbar,Dark Theme 。在最新版本中,我们添加了一些 Lint 规则,让你更好的区分属性是来自 Appcompat 还是原本的 framework ,确保你使用正确的一个。我们还对 AppCompat 深色主题进行了实质性的稳定性改进。

https://developer.android.com/jetpack/androidx/releases/appcompat

Webkit

Jetpack WebKit 在 1.2 release 版本新增了一个 API,强制支持暗黑模式。

当这个 API 启动时,如果网站支持深色主题,WebView 会进行渲染。如果不支持,API 将会强制修改相应的颜色。

https://developer.android.com/jetpack/androidx/releases/webkit

Jetpack Compose - 全新的 UI 工具包

最新的现代化 UI 工具包 Jetpack Compose 现在已经到达 Developer Preview 2 版本。

这个版本添加了许多新特性:与 View 的互交互性,更多的Material UI 组件,支持深色主题,新的 UI 测试和动画 API ,ConstraintLayout 基本支持,优化状态管理,集成可观察流,RTL 支持。

Android Studio 的预览现在可以交互,并且还有大量的编译优化。

https://developer.android.com/jetpack/compose

最后

前面快速介绍了 Jetpack 在之前几个月的更新。拥有 90+ 可用类库,我们也知道你很难找到你需要的,所以我们重新设计了 Jetpack 网站 ,并添加了一个方便的 API 选择器,以快速帮您找到可以解决问题的 Jetpack 库。

https://developer.android.com/jetpack


如果你对新技术比较感兴趣,欢迎关注本号,后续会推送更详细的实践相关文章。

最.最.最.最后,在这里我也分享自己收录整理的Android学习PDF,里面对Jetpack有详细的讲解,希望可以帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,可以分享给身边好友一起学习

有需要的朋友可以移步这里领取:Android学习PDF+架构视频+面试文档+源码笔记

猜你喜欢

转载自blog.csdn.net/River_ly/article/details/106739356