我通过点击一个按钮关闭我的第二个活动,然后触发一个"完成()"方法。这应该与按下设备上的后退按钮相同,就可以了。 问题是它没有进入OnSaveInstanceState,这将在销毁一个活动时发生。结果是,再次重新调用此活动后,savedInstanceState == null,因此我无法保存我的最后一个变量'状态。
Button closeButton = (Button) findViewById(R.id.bClose);
closeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
答案 0 :(得分:1)
来自onSaveInstaceState
的官方文档:
不要将此方法与活动生命周期回调混淆,例如 onPause(),在放置活动时始终调用 背景或正在破坏的路上,或onStop() 在破坏之前召集。 onPause()和onStop()的一个例子 被调用,而不是这个方法是用户导航回来的时候 活动B到活动A :没有必要打电话 B上的onSaveInstanceState(Bundle)因为那个特定的实例会 永远不会被恢复,所以系统避免调用它。 一个例子 调用onPause()而不是onSaveInstanceState(Bundle)是什么时候 活动B在活动A前面启动:系统可能会避免 如果没有被杀死,则在活动A上调用onSaveInstanceState(Bundle) 在B的生命周期中,因为A的用户界面的状态 将保持不变。
您有两个未调用onSaveInstanceState
的示例。最重要的部分是开始:
不要将此方法与活动生命周期回调混淆,例如onPause(),当活动被放置在后台或正在销毁时,它总是被调用。
您不应该期望每次都会调用onSaveInstanceState
。此方法允许活动保存其 UI元素。如果您尝试持久保存变量值或其他内容(即视图中包含的值,但应该是应用程序的生命周期 - 例如用户名),则应使用其他机制,如SharedPreferences
。
<强>来源强>