gpt4 book ai didi

Android 10 - 奇怪的 Activity 生命周期

转载 作者:行者123 更新时间:2023-12-05 00:13:24 25 4
gpt4 key购买 nike

我在 Android 10 上遇到了一个奇怪的问题,当我开始新的横向 Activity 时,下面的 Activity 将重新创建。

假设有两个 Activity 类:

ActivityA: orientation = unspecified
ActivityB: orientation = force landscape, full screen, opaque

如果我从ActivityA启动ActivityB,生命周期事件的日志:

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() called

ActivityA 又重新创建了吗?

正如我在我的设备中看到的那样,ActivityAActivityB 可见之前以及当 ActivityB 退出时,有一个动画会旋转到横向模式, ActivityA 再次旋转回纵向模式。此行为可能会导致 ActivityA 一次又一次地重新创建。

它乱七八糟,你知道如何防止ActivityA在这种情况下重新创建,或者这是Android本身的错误?

更新 1

我可以很容易地处理 ActivityA 的配置更改,问题是 ActivityA 有一个非常复杂的 View 结构,不必要地重新创建它会导致 UI 滞后,而且 Activity 的生命周期回调也很困惑导致逻辑错误。

更新 2

我刚刚发现 recreate() 方法被 AppCompatDelegateImpl 类调用了两次,这就是为什么我得到奇怪的生命周期行为:

enter image description here

最佳答案

对于这种行为,您可能无能为力。如果不会给您带来太多问题,我会提出以下建议:

  • android:configChanges="orientation" 添加到 ActivityA 的 list 条目中
  • ActivityA 中实现 onConfigurationChanged() 并自行处理方向变化

这将防止 Android 在方向更改期间终止和重新创建 ActivityA

关于Android 10 - 奇怪的 Activity 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63500099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com