【发布时间】:2017-02-06 14:10:33
【问题描述】:
我有一个通过setRetainInstance(true) 保存状态的片段。这是我的片段非常简化的代码:
public class MyFragment extends Fragment {
private SomeData mData;
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
if (savedInstanceState == null) {
mData = new SomeData(getView());
} else {
mData.refresh(getView());
}
// More awesome code
}
}
}
有时应用程序会因NullPointerException 而崩溃——我的mData 突然变成null。当我折叠应用程序并在一段时间后返回时会发生这种情况。
我有一些理论。一段时间后,操作系统杀死了Activity 和Fragment(尽管setRetainInstance (true))。因此创建了我的片段的一个新对象,其中mData 由null 初始化。但savedInstanseState 不等于 null。因此,新片段跳过初始化并尝试在空引用上调用refresh(View)。
我的问题:
当操作系统终止活动(当应用不在屏幕上时)并在返回后重新创建时,我的 sn-p 中 onActivityCreated(savedInstanceState) 方法中的 savedInstanseState 变量将包含什么?
【问题讨论】:
标签: android android-fragments android-lifecycle