activity 方向改变错误

activity orientation change bug

我遇到了一个以前在 Android 应用程序中从未见过的奇怪错误。当从锁定在纵向模式的 activity 导航到锁定在横向模式的 activity 并返回时,本应处于纵向模式的 activity 出现在纵向模式下,转到横向模式,然后返回到纵向。

当设备平放在 table 上且实际方向没有变化时会发生这种情况。我正在使用两个单独的活动,这是我在项目中拥有的唯一代码。

Here is a video of the bug, and here's a link 到重现此错误的确切项目。它发生在不止一台设备上,因此它不会与我的设备隔离。

问题:

我尝试过的事情:

更新 1

更多我尝试过的东西:

更新 2

我一直在处理上面链接的项目,只是做了一些覆盖以注销正在发生的一切。我发现,当调用 onConfigurationChanged 时,它会在横向和纵向方向之间产生轻微的摆动。不做摆动的后退导航的输出是:

D/class com.mdk_studio.orientationbugtests.MainActivity: onStateNotSaved
D/class com.mdk_studio.orientationbugtests.MainActivity: onRestart
D/class com.mdk_studio.orientationbugtests.MainActivity: onWindowFocusChanged

shimmy 错误的输出是:

D/class com.mdk_studio.orientationbugtests.MainActivity: onStateNotSaved
D/class com.mdk_studio.orientationbugtests.MainActivity: onRestart
D/class com.mdk_studio.orientationbugtests.MainActivity: onWindowFocusChanged
D/class com.mdk_studio.orientationbugtests.MainActivity: onConfigurationChanged
D/class com.mdk_studio.orientationbugtests.MainActivity: onConfigurationChanged

我想现在的问题是,如何确保不会调用方向更改?

测试清单级别方向设置和程序化方向设置的所有不同组合后。我已经发现,要使 onConfigurationChanged 函数中的方向正确,您必须在实际开始导航之前设置方向。

对我有用并完全消除这种行为的组合是将我想要纵向显示的清单中的 activity 设置为 "nosensor"。然后使用

将我想要的横向设置为横向activity
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

并在 导航发生之前的 onBackPressed 中将方向设置回纵向。这部分很重要,一旦触发导航然后设置方向,在某些情况下,当 newConfiguration 在 onConfigurationChanged 调用中通过时,它的方向错误,然后它以某种方式发出另一个调用来纠正它已在第一次通话时更新。

tl;博士 将您想要的 activity 的方向设置为 "nosensor"。在 onCreate 中以编程方式将方向设置为横向。在 onBackPressed 中将方向设置回纵向,在 super 调用之前