Android Fragments 模拟活动/片段重新创建

weylhg0b  于 2022-11-24  发布在  Android
关注(0)|答案(4)|浏览(173)

我正在尝试模拟ActivityFragment的重新创建,并检查onSaveInstancestate()onRestoreInstanceState(),通常检查我是否在所有情况下都以良好的方式处理Activity重新创建,例如,就像屏幕旋转导致Activity重新创建自己一样。
但在我的情况下,我想检查更多的选项/情况,这可能会导致重新创建,因为我的应用程序不能旋转(所有活动都是纵向)。
我看到许多文章、博客和stackoverflow关于此主题的问题/答案,例如here,here,here.
当这个堆栈溢出回答为什么不总是使用android:configChanges=“keyboardHidden|定向”?还有很多事件可以导致活动重新创建,所以在我阅读后,我想测试我的应用程序的一些这些事件。
例如,我在Activity中按下Home键,然后进入设置,尝试更改语言、字体大小等,但这些操作都没有让我的应用按照预期重新创建。当我返回应用时,它刚刚恢复和onCreate()从来没有打电话。所以我甚至检查有关这方面的官方文件。他们还说,它应该导致我的活动重新-创建:报价:

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

但正如我所说,这并没有发生在我身上。
这对我来说是巨大的,因为我很天真,认为如果我的应用程序将只在肖像或如果我将添加到清单此行:

android:configChanges="keyboardHidden|orientation|screenSize"

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

b91juud3

b91juud31#

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

woobm2wo

woobm2wo2#

你说当你在应用程序中改变设备的方向时,它不会被重新创建。通常情况下,它会被重新创建。当你添加android:configChanges="orientation"行时,这意味着你告诉系统你将在应用程序中处理方向变化,而不必担心正常行为。
如果您从清单中的Activity声明中删除它,您将看到它按预期运行(在方向改变时销毁/重新创建)。
希望能有所帮助。

e1xvtsh3

e1xvtsh33#

按下home键只会在最初引发onPause。您的Activity不会再次通过onCreate,直到它被完全销毁,这不会发生,除非Android决定它需要内存用于其他进程。
最简单的方法就是从configChanges中移除orientation,然后旋转Activity,看看会发生什么。布局可能无法正常工作,但是您应该能够检查您的生命周期代码。类似地,移除keyboardHidden,然后切换软键盘。您的Activity应该会经历生命周期序列。
更改设备的区域设置会导致重新创建Activity。请注意,需要更改的是全局区域设置,而不是键盘输入的语言。
其他的方法也出现在脑海中,比如通过手机上的一个键序列手动销毁应用程序(例如,在一些手机上,按住Home键并在应用程序上向左滑动以杀死应用程序),或者通过从调试器中终止应用程序。

ws51t4hk

ws51t4hk4#

在设备/仿真器的“开发人员选项”中,激活以下选项:“不保留活动”。
启用此选项后,Activity暂停并返回时,将调用保存示例的循环(例如,Activity前面的另一个Activity或按下Home按钮以最小化所有应用程序,...)。这对于测试和模拟娱乐和相关错误非常有用。

相关问题