我有一个奇怪的问题发生在Android 10上,当我开始新的景观活动时,下面的活动将重新创建。
假设有两个Activity类:
ActivityA: orientation = unspecified
ActivityB: orientation = force landscape, full screen, opaque如果我从ActivityB启动ActivityA,那么生命周期事件的日志:
D/ActivityA: onPause() called
D/ActivityB: onCreate() called
D/ActivityB: onStart() called
D/ActivityB: onResume() called
D/ActivityA: onStop() called
D/ActivityA: onDestroy() called
D/ActivityA: onCreate() called
D/ActivityA: onStart() called
D/ActivityA: onResume() called
D/ActivityA: onPause() called
D/ActivityA: onStop() called可以清楚地看到ActivityA是重新创建的,而且ActivityA#onResume是在ActiviyB#onResume之后调用的?
好的,现在我们在堆栈的顶部有ActivityB,然后我按后退按钮:
D/ActivityB: onPause() called
D/ActivityA: onStart() called
D/ActivityA: onResume() called
D/ActivityA: onPause() called
D/ActivityA: onStop() called
D/ActivityA: onDestroy() called
D/ActivityA: onCreate() called
D/ActivityA: onStart() called
D/ActivityA: onResume() called
D/ActivityB: onStop() called
D/ActivityB: onDestroy() calledActivityA又被重新创建了?
正如我在我的设备中所看到的那样,在ActivityA变得可见之前,ActivityB会旋转到横向模式,而当ActivityB退出时,ActivityA再次旋转回纵向模式。此行为可能导致ActivityA一次又一次地重新创建。
它会造成很多麻烦,你知道如何防止ActivityA在这种情况下重新创建吗,或者这是安卓本身的一个bug?
更新1
我可以很容易地在ActivityA上处理配置更改,问题是ActivityA有一个非常复杂的视图结构,重新创建它不必要地导致UI滞后,而且活动的生命周期回调混乱也会导致逻辑中断。
更新2
我刚刚发现recreate()方法被AppCompatDelegateImpl类调用了两次,这就是为什么我会得到奇怪的生命周期行为:

发布于 2020-08-30 12:15:04
这看起来像是一个特定于设备的错误。
我在Pixel3a (API 29 & 30)模拟器上试用了您的代码。我得到的是:
从ActivityB启动ActivityA的探讨
D/MainActivityA: onPause() called
D/MainActivityB: onCreate() called
D/MainActivityB: onStart() called
D/MainActivityB: onResume() called
D/MainActivityA: onStop() called在后按钮按下:
D/MainActivityB: onPause() called
D/MainActivityA: onStart() called
D/MainActivityA: onResume() called
D/MainActivityB: onStop() called
D/MainActivityB: onDestroy() called

您应该使用适当的Android构建和使用的设备进行提出问题。
关于问题中更新2的思考
日志显示正在调用onConfigurationChanged(Configuration)。文档指出,将在运行时配置更改时重新创建活动。
您可以做的是在您的活动中重写onConfigurationChanged(Configuration),并记录配置对象,以查看哪些设备配置发生了更改。可能是Orientation,Screen size,ScreenLayout或Keyboard availability
发布于 2020-08-21 21:13:56
也许你对这种行为无能为力。如果不给你带来太多的问题,我建议如下:
android:configChanges="orientation"添加到ActivityA的清单条目中onConfigurationChanged()中实现ActivityA并自行处理方向更改这将防止安卓在改变方向时杀死和重新创建ActivityA。
发布于 2020-08-20 07:22:57
不仅仅是你面临这个问题(很多人都是),这是一个需要修复的错误,它不应该被破坏,我能知道你使用的是哪种设备吗?在评论中,你可能会说。
https://stackoverflow.com/questions/63500099
复制相似问题