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

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

Android 11 :开发者预览版 2


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

android-developers.googleblog.com/2020/03/and…

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


同步 IME 动画

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


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

image.png

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


NDK Image Decoder

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

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

github.com/android/ndk…


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 值添加到清单中。
  • 应用可以在支持的设备上选择 可变刷新率
  • 模拟器现在支持前后摄像头了。


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

image.png


AndroidX Release


Beta: CameraX

CameraX 离我们越来越近啦。

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

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

地址 :medium.com/androiddeve…

官网相关介绍:

developer.android.com/jetpack/and…

developer.android.com/training/ca…


Stable

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


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 ,文章地址如下:

developer.android.com/training/ba…

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


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 地址: medium.com/androiddeve…

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


App Bundle Testing

标题: Developer Tools on Play Store 地址: medium.com/androiddeve…

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


When, Enums, and R8

Kotlin Vocabulary 系列的最新文章。

标题 :When using enums and R8…地址:medium.com/androiddeve…

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


The Suspend Modifier — Under the Hood

文章地址:

medium.com/androiddeve…

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


Storage in Android 11

文章地址:

medium.com/androiddeve…

大家应该对 分区存储 已经相当了解了。这里介绍了 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

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

medium.com/androiddeve…

medium.com/androiddeve…

medium.com/androiddeve…


Videos


Google 推荐了四个视频。

image.png

www.youtube.com/watch?v=yxN…

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

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

image.png

www.youtube.com/watch?v=IQf…

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

image.png

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

image.png

www.youtube.com/watch?v=lTo…

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


Google Game 峰会


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

medium.com/androiddeve…


最后


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

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



相关文章
|
5月前
|
Android开发
Android中如何动态的调整Dialog的背景深暗
在Android开发中,Dialog和DialogFragment可通过设置`Window`的`backgroundDimAmount`来控制背景变暗,突出对话框。在DialogFragment的`onCreateDialog`或`onViewCreated`中,获取`Dialog`的`Window`,设置`LayoutParams.dimAmount`(例如0.5f)并添加`FLAG_DIM_BEHIND`标志。要动态调整,可保存`LayoutParams`并在需要时更新。对于Dialog,创建时直接设置同样属性。还可以通过定义主题样式设置背景模糊程度。
149 7
|
5月前
|
XML Java Android开发
Android RecyclerView用代码动态设置item的selector
Android RecyclerView用代码动态设置item的selector
42 0
|
6月前
|
XML Java Android开发
Android控件动态使用 (转)
Android控件动态使用 (转)
40 1
|
6月前
|
测试技术 Android开发 开发者
RK3568 Android系统客制化动态替换ro任意属性
RK3568 Android系统客制化动态替换ro任意属性
272 1
|
6月前
|
安全 Android开发 数据安全/隐私保护
Android中的动态权限请求与最佳实践
【4月更文挑战第14天】 在现代安卓应用开发中,用户隐私和安全被赋予了前所未有的重要性。随着Android 6.0(API级别23)引入的运行时权限模型,开发者必须更加细致地处理权限请求,以确保应用功能的完整性同时不侵犯用户的隐私。本文将深入探讨如何在Android应用中实现动态权限请求,分析常见问题,并提供一系列最佳实践,以帮助开发者优雅地处理这一挑战。
428 5
|
6月前
|
Android开发
Android热补丁动态修复实践,腾讯&字节&网易&华为Android面试题分享
Android热补丁动态修复实践,腾讯&字节&网易&华为Android面试题分享
|
6月前
|
XML Android开发 数据格式
android 9 Systemui 动态隐藏导航栏
android 9 Systemui 动态隐藏导航栏
191 0
|
6月前
|
Android开发
安卓动态申请权限
安卓动态申请权限
49 0
|
6月前
解决Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
解决Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
121 5
|
6月前
|
Shell Android开发 开发者
Android系统 自定义动态修改init.custom.rc
Android系统 自定义动态修改init.custom.rc
358 0