有人可以澄清为什么我有这么奇怪的行为。至于文档,只要应用程序处于活动状态,Bundle savedInstanceState
中设置的onSaveInstanceState()
就会生效,所以当它在前台或后台时。应用程序被杀死后,savedInstanceState
实例也会被杀死。这就是我所拥有的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (savedInstanceState != null) {
Log.i("Dev", "not null");
} else {
Log.i("Dev", "null");
}
}
以下是我如何设置它:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("bool", true);
}
然后,我在模拟器中启动应用程序。打开应用程序后,单击home
按钮以显示启动器。然后我使用adb杀死应用程序的进程。之后我从最近使用的应用程序列表中启动应用程序,期望在Logcat中使用“ null ”,但我实际看到的是“ not null ”,所以我的理解是不正确的?
答案 0 :(得分:0)
是不是已经明确说明了here?或者我是否想念你的问题?
[..]To save additional data about the activity state, you must override the onSaveInstanceState() callback method. The system calls this method when the user is leaving your activity and passes it the Bundle object that will be saved in the event that your activity is destroyed unexpectedly. If the system must recreate the activity instance later, it passes the same Bundle object to both the onRestoreInstanceState() and onCreate() methods.
我的意思是对我来说这在大多数情况下也是合理的。因为当你的活动/应用程序在后台并且android系统关闭它时(假设它需要更多内存),它首先保存状态。因此,下次用户打开您的活动时,您可以恢复其之前的状态(也可能正是用户想要的状态,因为不是他关闭了活动,而是系统本身)。
答案 1 :(得分:0)
只要Android想要保存它就可以保存Bundle /可以保存它。 Android中的一个“功能”(引用,因为它最终是一个坏主意,因为它是一个好主意)是应用程序永远不会退出(到用户的视图)。他们执行此操作的机制是onSaveInstanceState-它存储Bundle,当稍后通过某种方法(例如来自最近的活动菜单)重新初始化应用程序时,它会将该Bundle传递给onCreate并让它自己重新初始化。 / p>
当然这也会引起问题。例如,如果您保存登录信息,退出应用程序将不会将您注销。因此,用户可以将他的手机交给朋友观看视频,认为他退出了他的移动银行应用程序并且是安全的,但朋友可以将其重新调用并重新创建。如果您的应用程序在静态变量或单例中具有大型数据结构,则除非您仔细编码,否则不会重新创建它们。需要按顺序探索活动的应用程序可以从中间重新启动。
现在Android可以选择忘记你的Bundle。如果你把几个MB放进去,我希望android能够快速忘记它。但它会尽可能地记住它。