Java 带单例的OnSaveInstanceState
我有一个单例数据类,我用它来存储数据。我在不同的Java 带单例的OnSaveInstanceState,java,android,singleton,Java,Android,Singleton,我有一个单例数据类,我用它来存储数据。我在不同的片段中访问它 加载第一个片段时,单例中的所有字段都是null是没有问题的。当显示第二个片段时,它依赖于这些字段来显示其数据。第一个片段确保初始化这些字段 但是,当用户按下第二个片段中的home按钮,并在大约一个小时后再次打开它时,Singleton已丢失其所有数据,片段尝试访问null字段 我想实现onSaveInstanceState方法,但我对它的工作原理感到困惑——我没有可分配的数据实例 @Override public void onSav
片段中访问它
加载第一个片段
时,单例中的所有字段都是null
是没有问题的。当显示第二个片段时,它依赖于这些字段来显示其数据。第一个片段
确保初始化这些字段
但是,当用户按下第二个片段
中的home按钮,并在大约一个小时后再次打开它时,Singleton已丢失其所有数据,片段
尝试访问null
字段
我想实现onSaveInstanceState
方法,但我对它的工作原理感到困惑——我没有可分配的数据实例
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("DATA", Data.getInstance());
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
savedInstanceState.getSerializable("DATA"); //What to do with this?
}
欢迎任何帮助。您可以看一看。onSaveInstanceState方法如果需要携带大型对象,则不太可取。两个片段是否位于同一活动中?如果是这样,为什么不将共享状态存储在活动的成员中,并使用活动的onSaveInstanceState()和onCreate()保存和恢复它呢。在你的片段中,你可以做
((MyActivityClass)getActivity()).getSharedState()
否则,您可以让您的singleton对象管理可以序列化和反序列化的成员对象:
MySingleton.instance().saveTo(outState);
MySingleton.instance().restoreFrom(savedInstanceState);
MySingleton.instance().getState();
在哪里
public void restoreFrom(Bundle savedInstanceState) {
mState = savedInstanceState.getSerializable("DATA");
}
但是,我不确定我是否理解为什么单身汉会丢失所有的数据?应用程序仍在后台运行,不是吗?我在我的应用程序中使用了相同的范例,但没有看到这种数据丢失。我遇到了这个问题,所以我想是的。很有趣!如果您对是什么导致单例中的数据消失有任何想法,请发布。这引起了我的关注。谢谢