问题描述
我有一个奇怪的问题,发生在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
是否重新创建?
正如我在设备中看到的那样,有一个动画,ActivityA
在ActivityB
可见之前旋转为横向模式,并且当ActivityB
退出时,ActivityA
再次旋转为纵向模式。此行为可能导致ActivityA
一次又一次地重新创建。
这很麻烦,您是否知道如何防止在这种情况下重新创建ActivityA
,或者这是Android本身的错误?
更新1
我可以轻松处理ActivityA
上的配置更改,问题是ActivityA
具有非常复杂的视图结构,不必要地重新创建它会导致UI滞后,而且活动的生命周期回调混乱也将导致逻辑中断。
更新2
我刚刚发现recreate()
类两次调用了AppCompatDelegateImpl
方法,这就是为什么我会得到奇怪的生命周期行为的原因:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)