大家好,我是秉心说。
昨晚在 Medium 上看到了 #Now in Android# 更新了第十四期,大致浏览了一遍,有点东西,onActivityResult() 都要被干掉了。
今天忍不住爬上来和大家分享最新一期的内容。单纯的翻译原文比较累,我这里就结合自己的看法大致介绍一下,喜欢看原文的同学,我这里也给出了原文链接:
https://medium.com/androiddevelopers/now-in-android-14-78a91def4962
公众号不支持外链,点击文末 "阅读原文",体验更佳。
下面就进入正题。
上篇文章 Now in Android #13 中介绍了Android 11 的第一个预览版,现在,第二个预览版已经发布了。该版本主要面对开发者,没有针对一般用户的更新。详细更新信息可以阅读 Android 官方开发者博客上的相关文章:
https://android-developers.googleblog.com/2020/03/android-11-developer-preview-2.html
下面介绍几个比较重要的更新。
不知道你有没有吐槽过 Android 的输入法动画,你可以现在打开微信中某个好友的聊天页面,点击输入框弹出软键盘,然后上下滑动聊天记录列表,输入法会迅速消失。这个视觉效果给人一种割裂的感觉,不连贯,就像官方说的没有做到 切换时逐帧精确 。
说起来可能不是那么形象,来一张官方给出的 通过 边衬区动画监听器 实现 IME 同步切换效果(左图) 和 通过 WindowInsetsAnimationController 实现应用驱动的 IME 体验(右图) 。
由应用控制 IME 的切换效果可以让 IME 更精准地与应用 UI 同步,比如配合过度滚动 UI 时的动画。
这是一个 Android 11 新增加的 API,NDK 图片解码,供 native 开发人员使用。
我也没有 Native 开发经验,这里就不多介绍了。感兴趣的可以到 Github 上看看使用示例,地址如下:
https://github.com/android/ndk-samples/tree/master/teapots/image-decoder
我们都知道 Kotlin 的类型系统保障了 空安全 ,让我们得以书写更加安全的代码。但是在 SDK 中并不是所有代码都是 Kotlin 写的,那么如何保证 Java 代码的空安全呢?
答案就是 注解。
Kotlin 编译器通过识别 Java 中的 @Nullable
和 @NonNull
注解,来判断对象是否可空,从而在编译期就发现可能存在的空指针错误。当编译器发现空指针,会直接抛出 error 。
另外,Kotlin 编译器还会识别 @RecentlyNullable
和 @RecentlyNonNull
注解,它们的作用和 @Nullable
、@NonNull
是一样的,但是编译器只会发出 warning ,并不会直接抛出错误。
在 Android 11 中,谷歌工程师增加了更多的 @RecentlyNullable
和 @RecentlyNonNull
注解,并将其中的一部分转换成了 @Nullable
和 @NonNull
。这也会是以后 Android 版本升级中的常规工作,来提供更强的空安全能力。
这是一个完全面向开发者的版本,也是测试你的应用的好时机。谷歌也提供了一个新的设置选项页面,来帮助你测试各种行为变化对你的应用产生的影响。
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
一些库发布了稳定版,都是一些 Bug fix 。
终于对 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
这里简单介绍一下使用方法。
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
类,在实现类中处理回调,进一步解耦。
这个特性大概是这一期最吸引我的地方了,后面我会单独写一篇文章来介绍这一特性,这里就不再多说了。
这一期推荐了不少技术文章,其中一些我已经阅读过了,没读过的我就不过多解释了,感兴趣的可以读读原文。
标题:Android Styling: Themes Overlay 地址: https://medium.com/androiddevelopers/android-styling-themes-overlay-1ffd57745207
这是一个系列的文章,关于 Theme 和 Style ,我还没有阅读。
标题:Developer Tools on Play Store 地址: https://medium.com/androiddevelopers/developer-tools-on-play-store-85fb710ee33b
Apk 很容易交给测试人员测试,那么 App Bundle 如何测试呢?
Kotlin Vocabulary 系列的最新文章。
标题 :When using enums and R8… 地址:https://medium.com/androiddevelopers/when-using-enums-and-r8-3f8f314c0a13
当 Enum 和 Switch 或者 When 配合使用时,会导致生成额外的类和数组,而 R8 帮助我们避免了这些不必要的开销。
文章地址:
https://medium.com/androiddevelopers/the-suspend-modifier-under-the-hood-b7ce46af624f
挂起函数与状态机,很值得一读。
文章地址:
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 。该权限将授权读写所有共享存储内容,这也将同时包含非媒体类型的文件。但是对于其他应用的私有目录,还是无法访问的。
这是一个系列的三篇文章,聊了聊协程的取消和异常处理。
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
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 优化枚举的文章。
主要涉及游戏开发相关,这里就不做过多介绍了,感兴趣的可以阅读原文。
https://medium.com/androiddevelopers/now-in-android-14-78a91def4962
新一期的 Now in Android 到这里就结束了。
后面我仍会持续跟进 Now in Android 系列,第一时间为大家带来 Android 最新资讯。
同时,欢迎关注我的公众号 秉心说TM ,更多精彩内容,不容错过!