我需要禁用应用程序中所有屏幕的活动转换动画。以前的解决方案对所有Android版本都有效:
<style name="base_theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@null</item>
</style>
但在Android 8“Oreo”上,每次转换(前进或后退)都会导致黑屏闪烁。即使没有任何动画,也会出现非常令人讨厌的闪烁(90%的概率,约20-30毫秒,整个屏幕)。
根据我的“研究”:
- 它不取决于活动内容,并且可以通过空活动进行复制
- 没有任何可能减缓转换过程的后台工作
- Intent.FLAG_ACTIVITY_NO_ANIMATION 也会闪烁
- overridePendingTransition(0,0)也无效
我能找到的唯一解决方案:
定义一个空的转换动画
<?xml version="1.0" encoding="utf-8"?>
<set />
将其应用于应用程序中的每个活动(onCreate和finish)
overridePendingTransition(R.anim.animation_activity_none, R.anim.animation_activity_none);
问题:
这是Oreo的某种新限制(即特性),还是平台bug,或者可能是应用程序问题? 是否有其他解决方案?
[更新]
还有一点发现。确保在主线程上调用Activity finish()和overridePendingTransition()方法对!否则会发生线程竞争,并且有时不会应用overridePendingTransition。
[更新]
谷歌已经确认这是Android 8.0中的一个bug,可能在8.1中得到修复。 因此,“空动画”修复将持续多年,直到minSdkVersion == 27。