我对os的配置更改处理有疑问,假设我在onCreate()中有一个Activity,它使用该片段中定义的特殊构造函数创建一个(或多个)片段实例。
当设备方向改变时,系统将破坏并再次创建片段,如果我是正确的,它将使用默认(无参数)构造函数来执行此操作,同时活动也将重新创建,它将再次使用相同的构造函数实例化片段。我的问题是,内存中会有两个不同的实例吗?如果没有,他们如何解决并成为一个?
答案 0 :(得分:3)
在活动的整个生命周期内保持片段状态的责任在FragmentManager
上,这就是为什么在提交时commit
和commitAllowingStateLoss
都有选项的原因。片段交易。如果留给自己的设备,Fragment
的状态将自动恢复。但是......如果你在代码中添加片段(而不是在xml布局中添加它),那么只有在需要时才能添加它。
通常,在onCreate
的情况下,检查活动是否未重新启动就足够了,即检查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();
}
}
}
你的问题的答案:
内存中会有两个不同的实例吗?
是的,如果您只是在每次调用onCreate
时添加片段,那么会有多个实例。