Java 如果用户没有显式修改savedInstanceState,它是否始终为空?
根据Android的开发者页面: 因为无论系统是否正在创建,都会调用onCreate()方法 必须创建活动的新实例或重新创建以前的实例 在尝试读取状态包之前,请检查其是否为空。 如果为null,则系统正在创建 活动,而不是恢复先前已销毁的活动。 据我所知,这意味着Java 如果用户没有显式修改savedInstanceState,它是否始终为空?,java,android,Java,Android,根据Android的开发者页面: 因为无论系统是否正在创建,都会调用onCreate()方法 必须创建活动的新实例或重新创建以前的实例 在尝试读取状态包之前,请检查其是否为空。 如果为null,则系统正在创建 活动,而不是恢复先前已销毁的活动。 据我所知,这意味着if(savedInstanceState==null)内部的onCreate()只会在活动的第一个实例上运行;如果用户在应用程序之间切换或更改方向,系统将调用onCreate(),上述条件将返回false,其中的代码将不会执行,如下
if(savedInstanceState==null)
内部的onCreate()
只会在活动的第一个实例上运行;如果用户在应用程序之间切换或更改方向,系统将调用onCreate()
,上述条件将返回false
,其中的代码将不会执行,如下代码所示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState == null) {
// Code here will run only on the *first* time onCreate() is called
}
// Code here will run every time onCreate() is called
}
但是,如果用户从未显式修改过saveInstanceState
对象,上述代码是否会按预期工作
从上面的引文中可以看出,方向的更改似乎会以某种方式修改saveInstanceState
,使上述条件返回true
我一直在研究这个主题,但没有找到有关系统如何在幕后修改savedInstanceState
的相关信息(或者它是否正在这样做)
因此,问题是:如果用户没有明确修改它,
savedInstanceState
是否始终为null
?savedInstanceState在重新创建设备旋转活动后不会为null。要检查这一点,只需在onCreate方法中放置断点,并在设备旋转后检查savedInstanceState的值。就我而言,我得到以下信息:
您应该自己检查。用户可以做什么来修改它?onCreate仅在创建步骤中被调用,并且它唯一一次为null是在它第一次创建时,任何其他操作(包括切换活动、方向更改和背景)都将保存state@MarcosVasconcelos用户可以做一些事情,比如
savedInstanceState.putInt(STATE_SCORE,mCurrentScore)代码>(如上面提供的链接所述)。如果系统在配置更改时修改对象,我在哪里可以找到有关发生了什么的更多详细信息?但是这样的putInformation代码仅在保存状态下,并且在onCreate上返回相同的状态,而如果null=new Bundle,则仅分配savedInstanceState将不起作用