hi 大家好,我是 DHL。就职于美团、快手、小米。公众号:ByteCode,专注有用的原创内容,Kotlin、性能优化、系统源码、图解算法、大厂面经。
Android 14 这个版本带来的变化是还挺大的,在这之前已经写了 3 篇关于 Android 14 的文章,感兴趣的小伙伴可以前去看看。
Android 开发者应该深有感触,近几年 Android 每次的更新,对开发者的影响都非常的大,而这次 Android 14 的更新,直接让陪伴我们多年的老朋友 overridePendingTransition
下线。
这篇文章主要想介绍一下我们的老朋友 overridePendingTransition
,它陪伴了我们度过了 14 年,如今也完成了它的使命,现已功成身退,这个方法在 Android 14 中被废弃了。
在 2009 年的时候,正式将 overridePendingTransition
添加到 Android Eclair(2.0)
源码中,Android 开发者对它应该有一种熟悉有陌生的感觉吧,我们刚开始学 Android 写 Activity 跳转动画的时候,都接触过这个。
java
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 的源码看一下。
当得知它都被废弃了,确实感到有些意外,源码中推荐我们使用新方法 overrideActivityTransition
代替 overridePendingTransition
。
我还以为是什么更好的方法,结果推荐的方法更加的难用,为了一个虚有其表的功能,废弃了这个 API,还给开发者增加了很大的负担。
按照 Android 官方的解释和源码中的说明,废弃掉这个方法是因为在 Android 14 中引入了新的返回动画,而 overrideActivityTransition
方法不能和它很好的做兼容,所以需要用新的方法去替换。
什么是新的返回动画
比如使用返回手势可以在应用后面显示主屏幕的动画预览。
小伙伴们一起来评评这个功能实用性怎么样,为了这个功能废弃掉我们的老朋友,如果是你,你会这么做吗?另外我们在看看新的 API 的设计。
新的 API 相比于旧 API 多了一个参数 overrideType
,一起来看看源码中是如何描述这个参数 overrideType
。
css
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
。
这个参数不是应该由系统自动来处理吗,开发者只需要关心参数 enterAnim
和 exitAnim
即可,这明显没有带来任何好处,还给开发者增加了很多负担。
这只是其中一个改变,Android 开发者应该都深有感触,每次 Android 的更新,都有一堆无用的改变,还给开发者增加了很多负担,每次的适配都是一堆体力活,这样就导致了 App 对 SDK 的版本产生了强烈的依赖。
不过好在有经验的开发者,经历过一次有一次的适配之后,积累了经验,在新的项目中,会对大部分 Android API 进行封装,如果 API 有大的变化,不需要对整个项目进行修改。
全文到这里就结束了,感谢你的阅读,坚持原创不易,欢迎在看、点赞、分享给身边的小伙伴,我会持续分享原创干货!!!
我开了一个云同步编译工具(SyncKit),主要用于本地写代码,同步到远程设备,在远程设备上进行编译,最后将编译的结果同步到本地,代码已经上传到 Github,欢迎前往仓库 hi-dhl/SyncKit 查看。
Hi 大家好,我是 DHL,就职于美团、快手、小米。公众号:ByteCode ,分享有用、有趣的硬核原创内容,Kotlin、Jetpack、性能优化、系统源码、算法及数据结构、动画、大厂面经,真诚推荐你关注我。
- 公众号:ByteCode
- 哔哩哔哩: space.bilibili.com/498153238
- 掘金: juejin.im/user/259450...
- 博客: hi-dhl.com
- Github: github.com/hi-dhl
最新文章
- 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,包含多种解题思路、时间复杂度、空间复杂度分析,在线阅读