返回活动时恢复状态不起作用,savedInstanceState为null

时间:2019-01-03 07:14:38

标签: java android

因此,我在恢复Activity的状态时遇到了一些麻烦。 在这一点上,我认为这可能是我的理解存在问题,而不是其他任何问题。

我的目标是从我的MainActivity转到Main2Activity。 我是否正确地认为,当用户从一页移动到另一页时,应该通过Activity来更改Intent来完成? 我这样做是这样的:

我的onCreate()的{​​{1}}里面有这个。

MainActivity

据我所知,应该为Main2Activity调用Button currentButton = (Button) findViewById(R.id.button2); currentButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { setContentView(R.layout.activity_main2); Intent nextIntent = new Intent(getApplicationContext(), Main2Activity.class); startActivity(nextIntent); } } ); onCreate()onStart(),然后为onResume()调用onSaveInstanceState(),然后为{ {1}}。 我已经用日志记录重载了所有这些函数,并看到确实按顺序调用了它们。

这是我的MainActivity的{​​{1}}:

onStop()

MainActivity中,我以相同的方式返回到onSaveInstanceState()。即findViewById()按钮,使其MainActivity重载,创建一个新的@Override public void onSaveInstanceState(Bundle savedInstanceState) { System.out.println("onSaveInstanceState called, saving state"); savedInstanceState.putInt("mySuperUniqueKey", testInt); super.onSaveInstanceState(savedInstanceState); } 并启动它。

然后Main2Activity类的MainActivity具有以下内容:

onClickListener()

Intent返回MainActivity时,从日志中可以看到onCreate()if (savedInstanceState != null) { System.out.println("savedInstanceState is not null"); testInt = savedInstanceState.getInt("mySuperUniqueKey"); } else { System.out.println("savedInstanceState is null"); } ,然后是MainActivity的{​​{1}}被调用,然后Main2Activity代表onCreate()。不幸的是,日志记录显示then onStart()总是返回空值。

此外,当在仿真器中时,来回切换方向可使它完美工作; onResume()不为null,并且具有保存的testInt。 因此,根据我的理解,我认为这是一个问题,必须缺少一些东西。

我的gradle的minSdkVersion设置为16,targetSdkVersion设置为28。我可能将minSdkVersion设置为太低了吗?

我已经阅读了官方android开发人员文档中的“了解活动生命周期”,但仍然无法获取。 https://developer.android.com/guide/components/activities/activity-lifecycle

我确实发现了类似的问题,但都没有一个符合我的情况,也有他们建议我已经解决的解决方案。

任何见解将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

已保存的实例状态包旨在保存方向变化之类的 current 活动的状态。它并非旨在在各种活动中持续存在。您应该使用Intent#putExtra

nextIntent.putExtra("mySuperUniqueKey", testInt);

然后,在您的下一个活动中,使用以下命令访问此传递的值:

int testInt = getIntent().getIntExtra("mySuperUniqueKey");