陪伴了 14 年的 API 下线了
  sdlEL34Lr1bb 2023年11月28日 34 0

hi 大家好,我是 DHL。就职于美团、快手、小米。公众号:ByteCode,专注有用的原创内容,Kotlin、性能优化、系统源码、图解算法、大厂面经。

Android 14 这个版本带来的变化是还挺大的,在这之前已经写了 3 篇关于 Android 14 的文章,感兴趣的小伙伴可以前去看看。

  • Android 14 彻底终结大厂流氓应用?
  • 适配 Android 14,你的应用受影响了吗
  • Android 14 新增权限

Android 开发者应该深有感触,近几年 Android 每次的更新,对开发者的影响都非常的大,而这次 Android 14 的更新,直接让陪伴我们多年的老朋友 overridePendingTransition 下线。

这篇文章主要想介绍一下我们的老朋友 overridePendingTransition,它陪伴了我们度过了 14 年,如今也完成了它的使命,现已功成身退,这个方法在 Android 14 中被废弃了。

陪伴了 14 年的 API 下线了_程序员

在 2009 年的时候,正式将 overridePendingTransition 添加到 Android Eclair(2.0) 源码中,Android 开发者对它应该有一种熟悉有陌生的感觉吧,我们刚开始学 Android 写 Activity 跳转动画的时候,都接触过这个。

Intent intent = new Intent(B.this, C.class);
startActivity(intent);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

这段代码对每个 Android 同学都非常熟悉,而且至今在项目里面,到处都有它的身影。如果我们要为 Antivity 添加进入或者退出动画,那么只需要在 startActivity() 或者 finish() 方法之后立即调用 overridePendingTransition 即可。

14 年后的今天,Android 14 的横空出世 overridePendingTransition 也完成了它的使命,在 Android 14 的源码中正式被废弃了,感兴趣的小伙伴,可以打开 Android 14 的源码看一下。

陪伴了 14 年的 API 下线了_Android Studio_02

当得知它都被废弃了,确实感到有些意外,源码中推荐我们使用新方法 overrideActivityTransition 代替 overridePendingTransition

我还以为是什么更好的方法,结果推荐的方法更加的难用,为了一个虚有其表的功能,废弃了这个 API,还给开发者增加了很大的负担。

按照 Android 官方的解释和源码中的说明,废弃掉这个方法是因为在 Android 14 中引入了新的返回动画,而 overrideActivityTransition 方法不能和它很好的做兼容,所以需要用新的方法去替换。

什么是新的返回动画

比如使用返回手势可以在应用后面显示主屏幕的动画预览。

陪伴了 14 年的 API 下线了_Android Studio_03

小伙伴们一起来评评这个功能实用性怎么样,为了这个功能废弃掉我们的老朋友,如果是你,你会这么做吗?另外我们在看看新的 API 的设计。

陪伴了 14 年的 API 下线了_ide_04

新的 API 相比于旧 API 多了一个参数 overrideType,一起来看看源码中是如何描述这个参数 overrideType

For example, if we want to customize the opening transition when launching 
Activity B which gets started from Activity A, we should call this method inside 
onCreate with overrideType = OVERRIDE_TRANSITION_OPEN because the Activity B 
will on top of the task. And if we want to customize the closing transition when
finishing Activity B and back to Activity A, since B is still is above A, we 
should call this method in Activity B with overrideType = OVERRIDE_TRANSITION_CLOSE.
 
If an Activity has called this method, and it also set another activity animation
by Window#setWindowAnimations(int), the system will choose the animation set from 
this method.

翻译一下就是,每次想使用过渡动画,都必须告诉系统 overrideType 使用什么参数,比如当我们从 Activity A 打开 Activity B 时,需要使用参数 overrideType = OVERRIDE_TRANSITION ,当我们从 Activity B 返回到 Activity A 时,需要使用参数 overrideType = OVERRIDE_TRANSITION_CLOSE

这个参数不是应该由系统自动来处理吗,开发者只需要关心参数 enterAnimexitAnim 即可,这明显没有带来任何好处,还给开发者增加了很多负担。

这只是其中一个改变,Android 开发者应该都深有感触,每次 Android 的更新,都有一堆无用的改变,还给开发者增加了很多负担,每次的适配都是一堆体力活,这样就导致了 App 对 SDK 的版本产生了强烈的依赖。

不过好在有经验的开发者,经历过一次有一次的适配之后,积累了经验,在新的项目中,会对大部分 Android API 进行封装,如果 API 有大的变化,不需要对整个项目进行修改。


全文到这里就结束了,感谢你的阅读,坚持原创不易,欢迎、点赞、分享给身边的小伙伴,我会持续分享原创干货!!!


我开了一个云同步编译工具(SyncKit),主要用于本地写代码,同步到远程设备,在远程设备上进行编译,最后将编译的结果同步到本地,代码已经上传到 Github,欢迎前往仓库 hi-dhl/SyncKit 查看。

  • 仓库 SyncKit:https://github.com/hi-dhl/SyncKit
  • 下载地址:https://github.com/hi-dhl/SyncKit/releases

Hi 大家好,我是 DHL,就职于美团、快手、小米。公众号:ByteCode ,分享有用、有趣的硬核原创内容,Kotlin、Jetpack、性能优化、系统源码、算法及数据结构、动画、大厂面经,真诚推荐你关注我。


最新文章

  • Android 13这些权限废弃,你的应用受影响了吗?
  • Android 12 已来,你的 App 崩溃了吗?
  • 国外大厂面试题, 7 个 Android Lifecycle 重要的知识点
  • Android 利器,我开发了云同步编译工具
  • Twitter 上有趣的代码
  • 谁动了我的内存,揭秘 OOM 崩溃下降 90% 的秘密
  • 反射技巧让你的性能提升 N 倍
  • 90%人不懂的泛型局限性,泛型擦除,星投影
  • 揭秘反射真的很耗时吗,射 10 万次耗时多久
  • Google 宣布废弃 LiveData.observe 方法
  • 影响性能的 Kotlin 代码(一)
  • 揭秘 Kotlin 中的 == 和 ===

开源新项目

  • 云同步编译工具(SyncKit),本地写代码,远程编译,欢迎前去查看 SyncKit
  • KtKit 小巧而实用,用 Kotlin 语言编写的工具库,欢迎前去查看 KtKit
  • 最全、最新的 AndroidX Jetpack 相关组件的实战项目以及相关组件原理分析文章,正在逐渐增加 Jetpack 新成员,仓库持续更新,欢迎前去查看 AndroidX-Jetpack-Practice
  • LeetCode / 剑指 offer,包含多种解题思路、时间复杂度、空间复杂度分析,在线阅读
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月28日 0

暂无评论

推荐阅读
  anLrwkgbyYZS   2023年12月30日   33   0   0 ideciciMaxideMax
sdlEL34Lr1bb
作者其他文章 更多