陪伴了 14 年的 API 下线了
hi 大家好,我是 DHL。就职于美团、快手、小米。
Android 开发者应该深有感触,近几年 Android 每次的更新,对开发者的影响都非常的大,而这次 Android 14 的更新,直接让陪伴我们多年的老朋友 overridePendingTransition
下线。
这篇文章主要想介绍一下我们的老朋友 overridePendingTransition
,它陪伴了我们度过了 14 年,如今也完成了它的使命,现已功成身退,这个方法在 Android 14 中被废弃了。
在 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 的源码看一下。
当得知它都被废弃了,确实感到有些意外,源码中推荐我们使用新方法 overrideActivityTransition
代替 overridePendingTransition
。
我还以为是什么更好的方法,结果推荐的方法更加的难用,为了一个虚有其表的功能,废弃了这个 API,还给开发者增加了很大的负担。
按照 Android 官方的解释和源码中的说明,废弃掉这个方法是因为在 Android 14 中引入了新的返回动画,而 overrideActivityTransition
方法不能和它很好的做兼容,所以需要用新的方法去替换。
什么是新的返回动画
比如使用返回手势可以在应用后面显示主屏幕的动画预览。
小伙伴们一起来评评这个功能实用性怎么样,为了这个功能废弃掉我们的老朋友,如果是你,你会这么做吗?另外我们在看看新的 API 的设计。
新的 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
。
这个参数不是应该由系统自动来处理吗,开发者只需要关心参数 enterAnim
和 exitAnim
即可,这明显没有带来任何好处,还给开发者增加了很多负担。
这只是其中一个改变,Android 开发者应该都深有感触,每次 Android 的更新,都有一堆无用的改变,还给开发者增加了很多负担,每次的适配都是一堆体力活,这样就导致了 App 对 SDK 的版本产生了强烈的依赖。
不过好在有经验的开发者,经历过一次有一次的适配之后,积累了经验,在新的项目中,会对大部分 Android API 进行封装,如果 API 有大的变化,不需要对整个项目进行修改。
全文到这里就结束了,感谢你的阅读,坚持原创不易,欢迎在看、点赞、分享给身边的小伙伴,我会持续分享原创干货!!!
我开了一个云同步编译工具(SyncKit),主要用于本地写代码,同步到远程设备,在远程设备上进行编译,最后将编译的结果同步到本地,代码已经上传到 Github,欢迎前往仓库 hi-dhl/SyncKit 查看。
来源:juejin.cn/post/7303878037590442022