我正在尝试模拟Activity
和Fragment
的重新创建,并检查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"
然后一切都会好起来,但显然不是这样,因为有更多的配置更改可以重新启动我的活动,所以我不能再从它运行,我想以一种好的方式处理它,现在我还想测试它。
4条答案
按热度按时间b91juud31#
更改设备语言是强制重新创建不涉及方向更改的所有Activity的一种方法。
woobm2wo2#
你说当你在应用程序中改变设备的方向时,它不会被重新创建。通常情况下,它会被重新创建。当你添加
android:configChanges="orientation"
行时,这意味着你告诉系统你将在应用程序中处理方向变化,而不必担心正常行为。如果您从清单中的Activity声明中删除它,您将看到它按预期运行(在方向改变时销毁/重新创建)。
希望能有所帮助。
e1xvtsh33#
按下home键只会在最初引发
onPause
。您的Activity
不会再次通过onCreate
,直到它被完全销毁,这不会发生,除非Android决定它需要内存用于其他进程。最简单的方法就是从
configChanges
中移除orientation
,然后旋转Activity
,看看会发生什么。布局可能无法正常工作,但是您应该能够检查您的生命周期代码。类似地,移除keyboardHidden
,然后切换软键盘。您的Activity
应该会经历生命周期序列。更改设备的区域设置会导致重新创建
Activity
。请注意,需要更改的是全局区域设置,而不是键盘输入的语言。其他的方法也出现在脑海中,比如通过手机上的一个键序列手动销毁应用程序(例如,在一些手机上,按住Home键并在应用程序上向左滑动以杀死应用程序),或者通过从调试器中终止应用程序。
ws51t4hk4#
在设备/仿真器的“开发人员选项”中,激活以下选项:“不保留活动”。
启用此选项后,Activity暂停并返回时,将调用保存示例的循环(例如,Activity前面的另一个Activity或按下Home按钮以最小化所有应用程序,...)。这对于测试和模拟娱乐和相关错误非常有用。