安卓中活动方向变化的奇怪行为

9
我在处理Activity的方向时遇到了一个非常奇怪的问题。让我解释一下情况。
我有两个Activity,分别是A和B。当前A处于横屏模式,而B(固定)处于竖屏模式。如果用户更改了A的方向,则我会保存A的状态。我从A(横屏)转到B(竖屏),因此在这种情况下,A在后台,应该调用onSaveInstance(bundle)方法。但它确实调用了,当我回来时,A的onResume()被调用并出现了异常,提示无法在onSaveInstance()之后调用onResume()。
这让我感到非常恼火。
更新编辑
如果两个Activity可以有任何方向。那么当去往B时,Activity A的onSaveInstance(bundle)不会被调用,它可以正常工作。

2
也许这个问题与你的问题相关:https://dev59.com/qms05IYBdhLWcg3wD90B - David Wasser
或者这个问题:https://dev59.com/T8_Kz4gBFxS5KdRj0eQQ - David Wasser
谢谢,这些问题讨论了同一个问题,但没有提到令人难以置信的资源来解决错误。该片段出现在Android 10版本中,而不是在版本16中运行。因此,如果它是一个错误,那么它应该已经被解决了。 - Tofeeq Ahmad
还有一件事,如果它涉及到片段事务,则应在每种情况下都保持持久化。如果两个活动都可以有任何方向,则不会持久化。 - Tofeeq Ahmad
在onResume()中没有代码,只是将它们视为生命周期。这是我的异常,我得到了一个异常:在A的onSaveInstance()之后不能调用onResume()。 - Tofeeq Ahmad
显示剩余3条评论
1个回答

5

虽然我仍在等待一些逻辑说明,但是我已经解决了我的问题。当你从Activity A到B时,onsaveInstance() 在每种情况下都会调用。因此,当返回时,Activity会重新启动,但onsaveInstance()不会再次调用。所以我遇到了问题。

onResume() can not be called after onSaveInstance(Bundle)

原因 - 我认为由于活动状态已经保存,所以不能调用onResume()。主要问题是onSaveInstance(Bundle)不是活动生命周期的一部分,因此这是一个非常麻烦的情况。

解决方案 -我从onSaveInstance(Bundle)中删除了super.onSavaInstance(Bundle)。问题得到了解决。它仍然适用于方向更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接