【发布时间】:2017-09-25 09:30:15
【问题描述】:
我需要为我的应用程序中的所有屏幕禁用 Activity 过渡动画。以前的解决方案适用于所有 Android 版本:
<style name="base_theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@null</item>
</style>
...但对于 Android 8“Oreo”,它会导致每次转换(向前或向后移动)时黑屏闪烁。 IE。仍然没有任何动画,但会发生非常烦人的闪烁(90% 的几率,约 20-30 毫秒,整个屏幕)。
根据我的“研究”:
- 不依赖活动内容,以空活动复制
- 没有任何可能减慢转换过程的后台工作
- Intent.FLAG_ACTIVITY_NO_ANIMATION 也会闪烁
- overridePendingTransition(0,0) 也不起作用
我能找到的唯一解决方案:
定义一个空的过渡动画
<?xml version="1.0" encoding="utf-8"?>
<set />
并将其应用于应用程序中的每个活动(onCreate 和完成)
overridePendingTransition(R.anim.animation_activity_none, R.anim.animation_activity_none);
问题:
是奥利奥的某种新限制(即功能),还是平台错误,或者可能是应用程序问题? 还有其他解决方案吗?
[更新]
还有一个发现。确保在主线程上调用 Activity finish() 和 overridePendingTransition() 对!否则会发生线程竞争并且有时不会应用 overridePendingTransition。
[更新]
Google 已确认这是 Android 8.0 中的一个错误,可能已在 8.1 中修复。 所以“空动画”修复是多年的,直到 minSdkVersion == 27。
【问题讨论】:
-
stackoverflow.com/a/11079475/2949834 你有没有尝试将 parent 更改为 parent="android:Theme"?
-
@KimKevin 是的,它无论如何都会闪烁。因此使用 Activity 或 AppCompatActivity 并不重要。
-
@SergeyKrivenkov 非常感谢你。我可以看到您做了很多艰苦的工作来深入研究并探索减少的测试用例,因此您的解决方案为我节省了大量时间走同样的路。您是否在 Android 问题跟踪器中报告了此问题?
-
@hustoj2 提交了错误报告issuetracker.google.com/issues/67728861
标签: android android-animation android-8.0-oreo