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

2021-08-31 15:17:06 浏览数 (1)

大家好,我是秉心说。

昨晚在 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 的切换效果可以让 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 离我们越来越近啦。

  • 使用 ProcessCameraProvider显式初始化相机
  • 通过 最新的 CameraSelector API 选择摄像头
  • 通过 CameraInfo 和 CameraControl 更方便的访问相机信息和控制相机。例如缩放,聚焦。

关于 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 。

  • Fragment 1.2.3
  • Paging 2.1.2
  • Room 2.2.5
  • Webkit 1.2.0,主要更新为支持了暗黑模式。
  • WorkManager 2.3.3 和 2.3.4

Alpha

终于对 onActivityResult 下手了。

在最新的 Activity 1.2.0-alpha02 和 Fragment 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

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

代码语言:javascript复制
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 ,更多精彩内容,不容错过!

0 人点赞