我正在尝试模拟Activity
和Fragment
重新创建,还要检查onSaveInstancestate()
和onRestoreInstanceState()
,并检查我是否正在处理重新创建的活动在所有情况下都是一种好方法,例如,就像屏幕旋转导致活动重新创建它一样。
但在我的情况下,我想检查更多可能导致重新创建的选项/案例,因为我的应用程序无法轮换(所有活动都是纵向)。
我看到很多关于此主题的文章,博客和stackoverflow问题/答案,例如here, here,和here.
正如此stackoverflow回答说Why not use always android:configChanges="keyboardHidden|orientation"? 还有更多的事件可以导致活动重新创建,所以在我阅读之后我想测试我的应用程序中的一些事件。
例如我在我的活动中按下主页按钮然后我进入设置并尝试更改语言,更改字体大小等...但是没有这些操作使我的应用程序重新创建,因为我会期望。
当我回到我的应用程序时,它刚刚恢复,onCreate()
从未打过电话。
所以我甚至检查了official documents这个问题。他们还说它应该导致我的活动重新创建:引用:
"When a configuration change occurs at runtime, the activity is shut down and restarted by default"
但正如我所说,这不是发生在我身上。
这对我来说是巨大的,因为我非常天真,并认为如果我的应用程序只是纵向或我将添加到清单这一行:
android:configChanges="keyboardHidden|orientation|screenSize"
然后每件事都会好的,显然它不是因为有更多的配置更改可以重新启动我的活动,所以我不能再从它运行了我想以一种好的方式处理它现在我想要也测试一下。
答案 0 :(得分:1)
更改设备语言是强制重新创建不涉及方向更改的所有活动的一种方法。
答案 1 :(得分:0)
您说当您在应用中更改设备的方向时,不会重新创建它。通常它会。当您添加行android:configChanges="orientation"
时,这意味着您告诉系统您将处理应用中的方向更改,而不用担心正常行为。
如果从清单中的活动声明中删除它,您将看到它按预期运行(在方向更改时销毁/重新创建)。
希望有所帮助。
答案 2 :(得分:0)
按主页按钮最初只会引发onPause
。您的Activity
在完全销毁之前不会再次通过onCreate
,除非Android决定需要其他进程的内存,否则不会发生这种情况。
最简单的方法是从orientation
移除configChanges
,然后轮换您的Activity
,看看会发生什么。布局可能无法正常工作,但您应该能够检查生命周期代码。同样,删除keyboardHidden
然后切换软键盘。您的Activity
应该经历生命周期序列。
更改设备的区域设置应该会重新创建Activity
。请注意,这是需要更改的全局区域设置,不是键盘输入的语言。
其他方式会浮现在脑海中,例如通过手机上的按键序列手动销毁应用程序(例如,按住主屏幕按钮并在应用程序上向左滑动以杀死某些手机),或者通过终止它调试器。