奥利奥系统:禁用Activity转场动画

6

我需要禁用应用程序中所有屏幕的活动转换动画。以前的解决方案对所有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。


你尝试过将parent更改为parent="android:Theme"吗? - kimkevin
@KimKevin 是的,它无论如何都会闪烁。所以使用Activity还是AppCompatActivity都没有关系。 - Sergey Krivenkov
@SergeyKrivenkov非常感谢你的贡献。我看到你花了很多精力挖掘和探索缩小的测试用例,所以你的解决方案节省了我大量时间走同样的路线。你在Android问题跟踪器中报告了吗? - hustoj2
1
@hustoj2 提交了一个错误报告 https://issuetracker.google.com/issues/67728861 - Sergey Krivenkov
1个回答

3
我有同样的问题,但我成功地解决了它。思路是什么都不播放,请查看下面的xml:

值文件夹

<style name="yourTheme">
    <item name="android:windowAnimationStyle">@style/ThemeApp.Animation.Activity.Replace</item>

<style name="ThemeApp.Animation.Activity.Replace">
    <item name="android:activityOpenEnterAnimation">@anim/replace_anim</item>
    <item name="android:activityOpenExitAnimation">@anim/replace_anim</item>
    <item name="android:activityCloseEnterAnimation">@anim/replace_anim</item>
    <item name="android:activityCloseExitAnimation">@anim/replace_anim</item>
    <item name="android:taskOpenEnterAnimation">@anim/replace_anim</item>
    <item name="android:taskOpenExitAnimation">@anim/replace_anim</item>

动画文件夹:replace_anim.xml

<set/>

你所描述的解决方案与上面问题部分提到的相同 - 播放空动画。但问题是:为什么会发生这种情况? - Sergey Krivenkov
1
请检查问题链接。Android确认这是O中的一个错误,似乎已经修复了。我还没有确认,但他们附上了一个视频。 - Mike Kuasinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接