我发现有两种不同的方法可以根据一些参数使我的活动运行。第一种是savedInstanceState,另一种是getIntent.getExtras()
问题1)我不理解的是,一旦我将bundle传递给我的活动,然后启动它,它应该具有bundle。 但是,如果由于某种原因再次重新创建活动,则应始终具有相同的bundle。(我是对的吗?)
问题2)基于问题1为真实的事实,以及我无法在活动已经启动的情况下覆盖bundle的事实,我想如果出于某种原因我希望在已经启动的Activity中更改bundle的某些参数, 我应该创建一些活动字段并在我的活动生命周期中使用这些字段。 并重写saveInstanseState以保存新字段,以防万一我的活动被重新创建。对吗?
问题3)基于以上所有内容,每个Android世界中的活动是否都需要像这样在onCreate()中启动:
if (savedInstanceState != null) {
mType = savedInstanceState.getInt("some_val1");
mCardId = savedInstanceState.getLong("some_val2");
mQuery = savedInstanceState.getString("some_val3");
mCategory = savedInstanceState.getLong("some_val4");;
} else {
mType = getIntent().getExtras().getInt("some_val1");
mCardId = getIntent().getExtras().getLong("some_val2");
mQuery = getIntent().getExtras().getString("some_val3");
mCategory = getIntent().getExtras().getString("some_val4");
}
Q4) 如果 onSaveInstanceState 被调用并保存了与启动活动的原始 bundle(即 getIntent.getExtras())不同的值,那么如果活动被重新创建,这是否意味着 saveInstanceState 与 getIntent.getExtras() 不同,还是它们现在相同?(如果它们相同,那么上面代码中的 if/else 就没有真正的意义,因为它们是相同的!)Q5) 如果我没有重写 onSaveInstanceState,但在创建活动时传递了一个 Bundle,这是否仍意味着如果活动重新创建,我仍然可以获得原始的 bundle?(我猜这个问题根据其他答案会自行回答)