Android 10-怪异的活动生命周期

问题描述

我有一个奇怪的问题,发生在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() called

ActivityA是否重新创建?

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

这很麻烦,您是否知道如何防止在这种情况下重新创建ActivityA,或者这是Android本身的错误?

更新1

我可以轻松处理ActivityA上的配置更改,问题是ActivityA具有非常复杂的视图结构,不必要地重新创建它会导致UI滞后,而且活动的生命周期回调混乱也将导致逻辑​​中断。

更新2

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

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)