【发布时间】:2016-02-20 21:01:39
【问题描述】:
我遇到了 2 种不同的类型来根据一些参数运行我的活动。第一个是 savedInstanceState,另一个是 getIntent.getExtras()
Q1) 所以我不明白的是,一旦我将 bundle 传递给我的活动然后启动它,它应该有包。 但是,如果由于某种原因再次重新创建活动,它应该再次具有相同的捆绑包。 (我说的对吗?)
Q2)基于 Q1 是真实的事实,以及一旦活动已经开始我不能只覆盖捆绑包的事实,我想如果由于某种原因在我已经开始的活动中,我想改变一些捆绑包的参数,我应该创建一些活动字段并在我的活动生活中使用这些字段。 如果由于某种原因我的活动将被重新创建,则覆盖 saveInstanseState 以保存新字段。是真的吗?
Q3) 基于以上事实,在 onCreate() 中,Android 世界中的每个活动都应该像这样开始:
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 被调用并保存的值与启动活动的原始包不同(getIntent.getExtras),如果再次重新创建活动,这是否意味着 saveInstanceState 不同于 getIntent.getExtras( ) 或者他们现在是一样的? (如果它们相同,那么上面代码中的 if/else 没有真正的含义,因为它是相同的!)。
Q5) 如果我没有覆盖 onSaveInstanceState,但是当我创建活动时我将它传递给一个 Bundle,这是否仍然意味着如果再次重新创建活动,我可以获得我的原始包? (我猜这个问题会根据其他答案自行回答)
【问题讨论】:
标签: android android-activity android-lifecycle