Now in Android #14 —— 最新 Android 动态分享

大家好,我是秉心说。

昨晚在 Medium 上看到了 #Now in Android# 更新了第十四期,大致浏览了一遍,有点东西,onActivityResult() 都要被干掉了。

今天忍不住爬上来和大家分享最新一期的内容。单纯的翻译原文比较累,我这里就结合自己的看法大致介绍一下,喜欢看原文的同学,我这里也给出了原文链接:

https://medium.com/androiddevelopers/now-in-android-14-78a91def4962

下面就进入正题。

Android 11 :开发者预览版 2

上篇文章 Now in Android #13 中介绍了Android 11 的第一个预览版,现在,第二个预览版已经发布了。该版本主要面对开发者,没有针对一般用户的更新。详细更新信息可以阅读 Android 官方开发者博客上的相关文章:

https://android-developers.googleblog.com/2020/03/android-11-developer-preview-2.html

下面介绍几个比较重要的更新。

同步 IME 动画

不知道你有没有吐槽过 Android 的输入法动画,你可以现在打开微信中某个好友的聊天页面,点击输入框弹出软键盘,然后上下滑动聊天记录列表,输入法会迅速消失。这个视觉效果给人一种割裂的感觉,不连贯,就像官方说的没有做到 切换时逐帧精确

说起来可能不是那么形象,来一张官方给出的 通过 边衬区动画监听器 实现 IME 同步切换效果(左图)通过
WindowInsetsAnimationController 实现应用驱动的 IME 体验(右图)

IME Animation

由应用控制 IME 的切换效果可以让 IME 更精准地与应用 UI 同步,比如配合过度滚动 UI 时的动画。

NDK Image Decoder

这是一个 Android 11 新增加的 API,NDK 图片解码,供 native 开发人员使用。

我也没有 Native 开发经验,这里就不多介绍了。感兴趣的可以到 Github 上看看使用示例,地址如下:

https://github.com/android/ndk-samples/tree/master/teapots/image-decoder

Android 11 中的可空性

我们都知道 Kotlin 的类型系统保障了 空安全 ,让我们得以书写更加安全的代码。但是在 SDK 中并不是所有代码都是 Kotlin 写的,那么如何保证 Java 代码的空安全呢?

答案就是 注解

Kotlin 编译器通过识别 Java 中的 @Nullable@NonNull 注解,来判断对象是否可空,从而在编译期就发现可能存在的空指针错误。当编译器发现空指针,会直接抛出 error 。

另外,Kotlin 编译器还会识别 @RecentlyNullable@RecentlyNonNull 注解,它们的作用和 @Nullable@NonNull 是一样的,但是编译器只会发出 warning ,并不会直接抛出错误。

在 Android 11 中,谷歌工程师增加了更多的 @RecentlyNullable@RecentlyNonNull 注解,并将其中的一部分转换成了 @Nullable@NonNull 。这也会是以后 Android 版本升级中的常规工作,来提供更强的空安全能力。

等等,还有更多!

  • 针对折叠屏的 铰链角度传感器
  • Neural Networks API 的新算子和控制 。我就不解释了,因为我不懂。。来自 Google AI 团队的新发现。
  • 添加了两种新的前台服务类型,摄像头麦克风 。如果您的应用要从前台服务访问摄像头或麦克风数据,则需要将对应的 foregroundServiceType 值添加到清单中。
  • 应用可以在支持的设备上选择 可变刷新率
  • 模拟器现在支持前后摄像头了。

这是一个完全面向开发者的版本,也是测试你的应用的好时机。谷歌也提供了一个新的设置选项页面,来帮助你测试各种行为变化对你的应用产生的影响。

AndroidX Release

Beta: CameraX

CameraX 离我们越来越近啦。

关于 CameraX 的更多文章,如下。

《Android’s CameraX Jetpack Library is now in Beta!》

地址 :https://medium.com/androiddevelopers/androids-camerax-jetpack-library-is-now-in-beta-bf4cf0cc3ea6

官网相关介绍:

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

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

Stable

一些库发布了稳定版,都是一些 Bug fix 。

Alpha

终于对 onActivityResult 下手了。

在最新的 Activity 1.2.0-alpha02Fragment 1.3.0-alpha02 中,通过 ActivityResultRegistry 即可完成 startActivityForResult()/ onActivityResult()requestPermissions() / onRequestPermissionsResult() 的流式处理,而无需在 Activity 和 Fragment 中覆写任何方法。

听起来比较神奇,官网也做了相关介绍。

Getting a Result from an Activity ,文章地址如下:

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

这里简单介绍一下使用方法。

val startForResult = prepareCall(StartActivityForResult()) { result: ActivityResult ->
    if (result.resultCode == Activity.RESULT_OK) {
        val intent = result.intent
        // Handle the Intent
    }
}

override fun onCreate(savedInstanceState: Bundle) {
    // ...

    val startButton = findViewById(R.id.start_button)

    startButton.setOnClickListener {
        // Use the Kotlin extension in activity-ktx
        // passing it the Intent you want to start
        startForResult(Intent(this, ResultProducingActivity::class.java))
    }
}

这是最简单的用法。也可以实现 LifecycleObserver 类,在实现类中处理回调,进一步解耦。

这个特性大概是这一期最吸引我的地方了,后面我会单独写一篇文章来介绍这一特性,这里就不再多说了。

Articles

这一期推荐了不少技术文章,其中一些我已经阅读过了,没读过的我就不过多解释了,感兴趣的可以读读原文。

Themes Overlay

标题: Android Styling: Themes Overlay
地址: https://medium.com/androiddevelopers/android-styling-themes-overlay-1ffd57745207

这是一个系列的文章,关于 Theme 和 Style ,我还没有阅读。

App Bundle Testing

标题: Developer Tools on Play Store
地址: https://medium.com/androiddevelopers/developer-tools-on-play-store-85fb710ee33b

Apk 很容易交给测试人员测试,那么 App Bundle 如何测试呢?

When, Enums, and R8

Kotlin Vocabulary 系列的最新文章。

标题 :When using enums and R8…
地址:https://medium.com/androiddevelopers/when-using-enums-and-r8-3f8f314c0a13

当 Enum 和 Switch 或者 When 配合使用时,会导致生成额外的类和数组,而 R8 帮助我们避免了这些不必要的开销。

The Suspend Modifier — Under the Hood

文章地址:

https://medium.com/androiddevelopers/the-suspend-modifier-under-the-hood-b7ce46af624f

挂起函数与状态机,很值得一读。

Storage in Android 11

文章地址:

https://medium.com/androiddevelopers/modern-user-storage-on-android-e9469e8624f9

大家应该对 分区存储 已经相当了解了。这里介绍了 Android 11 上的一些改进措施。

在 Android 10 上,应用编辑或者删除任何一个媒体文件都需要请求用户确认,现在可以一次请求多个文件了。同时,系统的默认图库应用 (Gallery) 将不再展示这些对话框。

一些开发者试图使用 Storage Access Framework (SAF) 遍历整个文件系统。在 Android 11 中,将不再允许用户授权访问 Downloads 的根目录、每个可用 SD 卡的根目录以及其它应用的目录。应用仍然可以通过 Storage Access Framework API 或者文件选择器来帮助用户从共享存储中选取个别文件。

针对文件管理器类的应用提供了特殊权限 MANAGE_EXTERNAL_STORAGE 。该权限将授权读写所有共享存储内容,这也将同时包含非媒体类型的文件。但是对于其他应用的私有目录,还是无法访问的。

Kotlin Coroutines: Cancellation and Exceptions

这是一个系列的三篇文章,聊了聊协程的取消和异常处理。

https://medium.com/androiddevelopers/coroutines-first-things-first-e6187bf3bb21

https://medium.com/androiddevelopers/cancellation-in-coroutines-aa6b90163629

https://medium.com/androiddevelopers/exceptions-in-coroutines-ce8da1ec060c

Videos

Google 推荐了四个视频。

https://www.youtube.com/watch?v=yxNROzu9nQQ&feature=emb_logo

有关更好的使用无障碍服务。

下面是三个 Kotlin Vocabulary 系列的配套视频。

https://www.youtube.com/watch?v=IQf-vtIC-Uc&feature=emb_logo

Kotlin 编译器是如何对协程使用黑魔法的。

https://www.youtube.com/watch?v=77hfjIYwouw&feature=emb_logo
讨论了使用 Kotlin 集合 进行即时计算和使用 序列 进行延迟计算的场景。

https://www.youtube.com/watch?v=lTo03M2HzFY&feature=emb_logo

对应前面 Article 中介绍过的 R8 优化枚举的文章。

Google Game 峰会

主要涉及游戏开发相关,这里就不做过多介绍了,感兴趣的可以阅读原文。

https://medium.com/androiddevelopers/now-in-android-14-78a91def4962

最后

新一期的 **Now in Android ** 到这里就结束了。

后面我仍会持续跟进 **Now in Android ** 系列,第一时间为大家带来 Android 最新资讯。

同时,欢迎关注我的公众号 秉心说TM ,更多精彩内容,不容错过!

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://luyao.tech/archives/nowinandroid14