重启 android 应用绕过 onStop
Restarting android app bypasses onStop
在我的应用程序中,我有一项功能允许用户更新一组个性化应用程序设置,由名为 useNew 的布尔标志触发。考虑到中断的可能性,我将 useNew 重置为 false,如果 a) 用户取消操作或 b) activity 处理此逻辑被意外终止。
我将重置逻辑放在 onStop 中,因为 Android 指定 post-Honeycomb,这是保证调用的最后一个生命周期事件:https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
除一种情况外,这在所有情况下都运行良好。如果我在 Studio 中 运行 应用程序,然后在应用程序仍然打开的情况下再次尝试从 Studio 运行 它,我会收到此警告消息,表明这将终止我的会话。
选择 "Restart app" 会关闭我的 activity 而不会 调用 onStop。我的旗帜从未重置,在下一个应用程序 运行 上,逻辑失败。
我的问题:这种行为在 Studio 中是罕见的,还是在极少数情况下可以跳过 onStop?
当 Android Studio 终止应用程序以重新启动它时,该操作是强制性的,因此它不遵守任何生命周期语义。它不通过驱动 Activity
生命周期状态的 "normal" 机制。对于托管您的应用程序的进程,可以将其视为 运行 kill -9
。
您确定没有调用 onStop 吗?可能发生的情况是正在调用 onStop 但相应的代码没有 运行。在 Android Studio 中,当您强制重启应用程序时,它会立即终止您的应用程序。
根据 Google 文档,onStop 是一种可终止的方法。
for [killable methods], after that method returns the process hosting the activity may be killed by the system at any time without another line of its code being executed.
相反,任何持久保存数据(即自动保存用户数据)的代码都应放在 onPause() 中。
You should use the onPause() method to write any persistent data (such as user edits) to storage.
在我的应用程序中,我有一项功能允许用户更新一组个性化应用程序设置,由名为 useNew 的布尔标志触发。考虑到中断的可能性,我将 useNew 重置为 false,如果 a) 用户取消操作或 b) activity 处理此逻辑被意外终止。 我将重置逻辑放在 onStop 中,因为 Android 指定 post-Honeycomb,这是保证调用的最后一个生命周期事件:https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
除一种情况外,这在所有情况下都运行良好。如果我在 Studio 中 运行 应用程序,然后在应用程序仍然打开的情况下再次尝试从 Studio 运行 它,我会收到此警告消息,表明这将终止我的会话。
选择 "Restart app" 会关闭我的 activity 而不会 调用 onStop。我的旗帜从未重置,在下一个应用程序 运行 上,逻辑失败。
我的问题:这种行为在 Studio 中是罕见的,还是在极少数情况下可以跳过 onStop?
当 Android Studio 终止应用程序以重新启动它时,该操作是强制性的,因此它不遵守任何生命周期语义。它不通过驱动 Activity
生命周期状态的 "normal" 机制。对于托管您的应用程序的进程,可以将其视为 运行 kill -9
。
您确定没有调用 onStop 吗?可能发生的情况是正在调用 onStop 但相应的代码没有 运行。在 Android Studio 中,当您强制重启应用程序时,它会立即终止您的应用程序。
根据 Google 文档,onStop 是一种可终止的方法。
for [killable methods], after that method returns the process hosting the activity may be killed by the system at any time without another line of its code being executed.
相反,任何持久保存数据(即自动保存用户数据)的代码都应放在 onPause() 中。
You should use the onPause() method to write any persistent data (such as user edits) to storage.