Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果用户没有显式修改savedInstanceState,它是否始终为空?_Java_Android - Fatal编程技术网

Java 如果用户没有显式修改savedInstanceState,它是否始终为空?

Java 如果用户没有显式修改savedInstanceState,它是否始终为空?,java,android,Java,Android,根据Android的开发者页面: 因为无论系统是否正在创建,都会调用onCreate()方法 必须创建活动的新实例或重新创建以前的实例 在尝试读取状态包之前,请检查其是否为空。 如果为null,则系统正在创建 活动,而不是恢复先前已销毁的活动。 据我所知,这意味着if(savedInstanceState==null)内部的onCreate()只会在活动的第一个实例上运行;如果用户在应用程序之间切换或更改方向,系统将调用onCreate(),上述条件将返回false,其中的代码将不会执行,如下

根据Android的开发者页面:

因为无论系统是否正在创建,都会调用onCreate()方法 必须创建活动的新实例或重新创建以前的实例 在尝试读取状态包之前,请检查其是否为空。 如果为null,则系统正在创建 活动,而不是恢复先前已销毁的活动。

据我所知,这意味着
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将不起作用