Android 为什么在添加片段时要检查savedInstanceState==null?

Android 为什么在添加片段时要检查savedInstanceState==null?,android,android-fragments,Android,Android Fragments,在片段中,在一个示例中,当添加片段时,他们检查savedInstanceState==null: public static class DetailsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getResources().ge

在片段中,在一个示例中,当添加片段时,他们检查
savedInstanceState==null

public static class DetailsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getResources().getConfiguration().orientation
                == Configuration.ORIENTATION_LANDSCAPE) {
            // If the screen is now in landscape mode, we can show the
            // dialog in-line with the list so we don't need this activity.
            finish();
            return;
        }

        if (savedInstanceState == null) {
            // During initial setup, plug in the details fragment.
            DetailsFragment details = new DetailsFragment();
            details.setArguments(getIntent().getExtras());
            getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
        }
    }
}
这张支票的目的是什么?如果它不在那里会发生什么

这张支票的目的是什么

不添加两次片段,尽管我更喜欢检查片段是否存在,而不是依赖于
Bundle
null

如果它不在那里会发生什么

最初,没有任何内容,因为在首次创建活动时,
捆绑包
将为
null

然而,随后,用户将设备的屏幕从纵向旋转到横向。或者,用户更改语言。或者,用户将设备放入制造商提供的汽车坞中。或者,用户进行任何其他配置更改

默认情况下,您的活动将被销毁并重新创建。默认情况下,您的片段也将被销毁和重新创建(例外:调用
setRetainInstance(true)
的片段,这些片段从旧活动中分离并附加到新活动)


因此,在第二次创建活动时——由于配置更改而创建的实例——您的片段已经存在,因为它是重新创建或保留的。您不需要该片段的第二个实例(通常),因此您会采取步骤来检测是否已发生此情况,并且不会运行新的
片段事务

,但即使在重新创建活动时,片段已经存在,您是否仍需要以某种方式将其“重新添加”到活动中?还是在重新创建片段时自动执行此操作?@Chin:在重新创建(或保留)片段时自动执行此操作。即使应用程序未在onSaveInstanceState()中保存任何内容,是否也能保证savedInstanceState为非空?Activity.onCreate()上的文档说:“savedInstanceState捆绑包:如果该活动在之前关闭后正在重新初始化,那么该捆绑包包含它最近在onSaveInstanceState(捆绑包)中提供的数据。注意:否则它为空。”@Phil:这一部分文档与我们看到的一致,在
活动
上传递给
onCreate()
的参数在第一次创建时为
null
,在配置更改和相关事件后重新创建时为非
null
(尽管可能为空)。我从未见过它有其他的表现。