Now in Android #15 —— 最新 Android 知识分享

5,487 阅读5分钟

大家好,我是秉心说。

新一期的 Now in Android 又更新了,原文地址如下:

https://medium.com/androiddevelopers/now-in-android-15-44bf3307a8f2

照例给大家总结一下。往期所有文章可以在这里查看:

https://luyao.tech/categories/nowinandroid

下面进入这一期的最新内容。

Android 11

上一期中介绍了 开发者预览版 2,到目前为止没有新版本的发布。Chet Haase 在原文中分享了几个值的一提的内容。

Can You Take the Heat?

Android 11 开发者预览版 2 为 Native 开发者新增了 Thermal API 。(我也不知道这是个啥)

在 Android 模拟器上运行 ARM 应用

Michael Hazard 发布了一篇关于在 Android 模拟器上运行 ARM 应用的文章:

https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html

我们的 PC 大多基于 x86 架构,对于依赖 ARM 库且无法构建 x86 版本应用的开发者来说,只能使用完整的 ARM 模拟系统映像,其速度是远远低于在 x86 设备上运行 x86 系统映像的。

在最新的 Android 11 系统映像中,这一问题得以解决。Android 11 系统映像能够在不影响整个系统的前提下,直接将 ARM 指令转换成 x86 指令。开发者无需搭建高负载的 ARM 环境即可执行 ARM 二进制文件并进行测试。

IME 动画 Sample App

上一期中有介绍过 IME 动画,通过监听 IME 动画可以让开发者平滑的调整视图内容。Chris Banes 开源了一个 Sample App 来展示这一效果。

源代码地址如下:

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

AndroidX

四月初很多 AndroidX 库都发布了版本,包括以下 Stable 版本:

  • ExifInterface 1.2.0 ,支持向 PNG 图片写入 EXIF 元数据,对 WebP 读写 EXIF 。现在 ExifInterface 可以处理对 PNG,JPEG,WebP 类型的文件写入。
  • Fragment 1.2.4 优化了 Proguard 和 Lint 。

这里提一下 Fragment 1.2.4 中的 Lint 优化。

在 Fragment 1.2.0 版本中曾经添加了一条 Lint 提示:

New Lint checks: Added a new Lint check that ensures you are using getViewLifecycleOwner() when observing LiveData from onCreateView(), onViewCreated(), or onActivityCreated().

建议我们调用 observe() 方法时传入 getViewLifecycleOwner() ,而不是 this

这是为了预防 Fragment 中 View 和 LifecycleOwner 生命周期不一致可能造成的空指针问题。

在最新的 Fragment 1.2.4 中,针对 DialogFragmnet 去除了这一 Lint 规则。

Disabled the FragmentLiveDataObserve Lint rule on DialogFragment classes as their lifecycle and view lifecycle are always in sync, making it safe to use either this or viewLifecycleOwner when calling observe

开发者团队也对此作出说明,DialogFragment 的生命周期和 View 的生命周期总是同步的,使用 this 或者 viewLifecycleOwner都是安全的。

这个修复来自 issuetracker 中用户的反馈,详细信息可查看:

https://issuetracker.google.com/issues/151765086

除了上面提到的两个 Stable 版本发布,还有一些 Beta 和 Alpha 版本。

Jetpack 所有库的发布记录在官网上都可以看到,地址如下:

https://developer.android.com/jetpack/androidx/versions


切换左边的 Channels ,可以查看各类别的类库更新记录。

向 AndroidX 迁移

Nick Anthony 发布了一篇关于如何从 Support 库迁移到 AndroidX 的文章,地址如下:

https://medium.com/androiddevelopers/migrating-to-androidx-tip-tricks-and-guidance-88d5de238876

这篇文章阅读量并不高,我想大部分人应该都不需要这篇文章了。实在没有任何理由再继续使用 Support 库了。

视频和文章

录屏

Google 的工程师大部分也都居家办公了,受环境限制,视频录制不是那么方便。但这并不妨碍工程师们分享知识,一些人选择了录屏分享。

Jose Alcérreca 分享了一些简短的录屏,我看了一些,也都比较基础,大多都在几分钟之内。

  • View Binding

    https://www.youtube.com/watch?list=PLNUr_cTShrWZNKJlnurh5MB1wkSEU2nlw&v=5VaWzrX6VZA

  • UI Test

    https://www.youtube.com/watch?v=EPcpKzAGZuI&list=PLNUr_cTShrWZNKJlnurh5MB1wkSEU2nlw&index=3&t=0s

  • LiveData 和 ViewModel 的使用

    https://www.youtube.com/watch?v=j1WdWCAkYig&list=PLNUr_cTShrWZNKJlnurh5MB1wkSEU2nlw&index=4&t=0s

  • DataBinding

    https://www.youtube.com/watch?v=j8xeUqKylBE&list=PLNUr_cTShrWZNKJlnurh5MB1wkSEU2nlw&index=5&t=0s

Kotlin

首先是关于 协程 的一个视频 Kotlin Coroutines 101 ,来自 Manuel Vivo 。地址如下:

https://www.youtube.com/watch?v=ZTDXo0-SKuU&feature=youtu.be

主要介绍了什么是协程以及协程解决了什么问题,还有协程的取消和测试。

接着是 Kotlin Vocabulary 系列,这一期的主题是 内联函数 ,同时发布了文章和视频。

文章地址:

https://medium.com/androiddevelopers/inline-functions-under-the-hood-12ddcc0b3a56

视频地址:

https://www.youtube.com/watch?v=wAQCs8-a6mg&feature=youtu.be

对于内联函数,编译器会把函数代码直接复制到函数调用处,以此来消除当参数类型是 lambda 时带来的额外的内存消耗。但内联函数并不是万能的,一般只用参数是 lambda 的情况下。当函数体很复杂的时候,也不适合用内联,反而会增大程序体积,得不偿失。

最后一篇 Kotlin 相关的文章是 Coroutines & Patterns for work that shouldn’t be cancelled ,地址如下:

https://medium.com/androiddevelopers/coroutines-patterns-for-work-that-shouldnt-be-cancelled-e26c40f142ad

这是 协程的取消和异常 系列的第四篇。这个系列的文章含金量很高,后续我会翻译一下这四篇文章。

大家肯定都了解了如何在 ViewModel/LiveData/Lifecycle 中正确的使用协程,使得在恰当的情况下可以取消协程,比如用户离开当前页面。但是当我们就是需要做一些长期的任务,即使用户离开当前页面也不需要取消,那么应该如何处理呢?这时候就需要 自定义作用域 。具体的的实现可以阅读原文,或者等待我的译文。

Jetpack

首先是 Tiem Song 发布的 Jetpack 相关视频,以 Sunflower sample application 为例,讲解了 Jetpack 的基本使用。地址如下:

https://www.youtube.com/watch?time_continue=898&v=2h-vuXC0SF8&feature=emb_logo

接着是 Pietro Maggi 发布的 WorkManager 系列第五篇文章,Customizing WorkManager — Fundamentals ,地址如下:

https://medium.com/androiddevelopers/customizing-workmanager-fundamentals-fdaa17c46dd2

这篇文章我没有看,就不多介绍了。

最后,大概是这一期唯一的新鲜东西了,MergeAdapter 。最新的 recyclerview-1.2.0 中发布了 MergeAdapter ,你可以将多个 Adapter 合并为一个。文章地址:

https://medium.com/androiddevelopers/merge-adapters-sequentially-with-mergeadapter-294d2942127a

关于 MergeAdapter ,我也在第一时间跟进发布了文章和 Sample。

https://luyao.tech/archives/mergeadapter

其他:Sean McQuillan 更新了Jetpack Compose 的示例 App,地址如下:

https://github.com/android/compose-samples/releases/tag/dev08

个人还是非常期待 Compose,虽然怎么看都有点遥遥无期的感觉。

Android Studio

https://medium.com/androiddevelopers/layout-inspector-1f8d446d048https://user-gold-cdn.xitu.io/2020/4/7/171554ab6dbdf693?w=1710&h=624&f=png&s=47213

介绍了最新的 Layout Inspector 进展。在 4.0 中,支持视图的 3D 展示,视图实时更新,直接跳转到视图声明处。我也写了一篇文章进行介绍:

Layout Inspector 支持 3D 视图了!

最后

这一期的 Now in Android 就到这里了。

这里是秉心说,欢迎关注我的公众号,第一时间为你带来 Android 最新资讯。

本文使用 mdnice 排版