重新启动android应用程序会绕过桌面

重新启动android应用程序会绕过桌面,android,android-lifecycle,Android,Android Lifecycle,在我的应用程序中,我有一个功能,允许用户更新一组个性化应用程序设置,由一个名为useNew的布尔标志触发。考虑到中断的可能性,如果a)用户取消操作或b)处理此逻辑的活动意外终止,我将useNew重置为false。 我将重置逻辑放在顶部,因为Android指定,在蜂巢之后,这是保证调用的最后一个生命周期事件: 这在所有情况下都很有效,只有一个例外。如果我在Studio中运行应用程序,然后在应用程序仍然打开的情况下,再次尝试从Studio中运行它,我会收到此警告消息,这将终止我的会话 选择“重新启动

在我的应用程序中,我有一个功能,允许用户更新一组个性化应用程序设置,由一个名为useNew的布尔标志触发。考虑到中断的可能性,如果a)用户取消操作或b)处理此逻辑的活动意外终止,我将useNew重置为false。 我将重置逻辑放在顶部,因为Android指定,在蜂巢之后,这是保证调用的最后一个生命周期事件:

这在所有情况下都很有效,只有一个例外。如果我在Studio中运行应用程序,然后在应用程序仍然打开的情况下,再次尝试从Studio中运行它,我会收到此警告消息,这将终止我的会话

选择“重新启动应用程序”将关闭我的活动,而不调用onStop。我的标志永远不会重置,在下一次应用程序运行时,逻辑失败


我的问题是:这种行为在Studio中是一种罕见的现象,还是在极少数情况下可以跳过onStop

当Android Studio关闭应用程序以重新启动时,操作是强制的,因此它不遵守任何生命周期语义。它不通过驱动
活动
生命周期状态的“正常”机制。将其视为运行应用程序宿主进程的
kill-9

您确定没有调用onStop吗?可能发生的情况是,正在调用onStop,但没有运行相应的代码。在Android Studio中,当您强制重新启动应用程序时,它会立即终止您的应用程序

从Google文档中可以看出,onStop是一种可杀死的方法

对于[killable methods],在该方法返回后,承载该活动的进程可能随时被系统终止,而无需再执行另一行代码

相反,任何持久化数据的代码(即自动保存用户数据)都应该放在onPause()中

应该使用onPause()方法将任何持久数据(如用户编辑)写入存储器