模拟活动/片段的重新创建



我正在尝试模拟ActivityFragment的重新创建,并检查onSaveInstancestate()onRestoreInstanceState(),通常检查我是否在所有情况下都以良好的方式处理活动重新创建,例如,就像屏幕旋转导致活动自行重新创建一样。

但在我的情况下,我想检查更多可能导致重新创建的选项/案例,因为我的应用程序无法旋转(所有活动都是纵向的)。

我看到了许多关于这个主题的文章、博客和stackoverflow问答,例如这里、这里和这里。

正如这个stackoverflow回答的那样,为什么不总是使用android:configChanges="键盘隐藏|方向"?还有更多的事件会导致活动重新创建,所以在我阅读后,我想测试我的应用程序中的一些事件。

例如,我在活动中按下了主页按钮,然后进入设置,试图更改语言、字体大小等,但这些操作都没有像我预期的那样使我的应用程序重新创建。当我回到我的应用程序时,它刚刚恢复,onCreate()从未打过电话。所以我甚至查阅了有关这方面的官方文件。他们还说,这应该会导致我的活动重新创建:引用:

"When a configuration change occurs at runtime, the activity is shut down and restarted by default" 

但正如我所说,这并没有发生在我身上。

这对我来说是巨大的,因为我非常天真,认为如果我的应用程序只在肖像中,或者如果我将添加到清单中,这一行:

android:configChanges="keyboardHidden|orientation|screenSize"

然后一切都会好起来,显然不是因为有更多的配置更改可以重新启动我的活动,所以我不能再从它运行了,我想以一种良好的方式处理它,现在我也想测试它。

更改设备语言是强制重新创建所有不涉及方向更改的活动的一种方法。

您说过,当您在应用程序中更改设备的方向时,不会重新创建它。通常情况下会这样。当你添加android:configChanges="orientation"行时,这意味着你告诉系统你将处理应用程序中的方向变化,而不必担心正常行为。

如果您从清单中的活动声明中删除它,您将看到它按预期运行(在方向更改时销毁/重新创建)。

希望能有所帮助。

按下主页按钮最初只会导致onPause升高。你的Activity在被完全销毁之前不会再次通过onCreate,除非Android决定它需要其他进程的内存,否则这种情况不会发生。

最简单的方法就是从configChanges中删除orientation,然后旋转Activity,看看会发生什么。布局可能无法正常工作,但您应该能够检查生命周期代码。同样,删除keyboardHidden,然后切换软键盘。您的Activity应该经历生命周期序列。

更改设备的区域设置将导致重新创建Activity。请注意,这是需要更改的全局区域设置,而不是键盘输入的语言。

想到了其他方法,比如通过手机上的按键序列手动销毁应用程序(例如,在某些手机上按住"主页"按钮并在应用程序上向左滑动以终止),或者从调试器中终止应用程序。

在您的设备/模拟器开发人员选项上,激活该选项:"不要保持活动;。

打开后,只要活动暂停并返回,就会调用已保存实例的循环(例如,它前面的另一个活动或按下主页按钮以最小化所有应用程序,…)。测试和模拟娱乐和相关错误非常有用。

最新更新