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 带单例的OnSaveInstanceState_Java_Android_Singleton - Fatal编程技术网

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");
}

但是,我不确定我是否理解为什么单身汉会丢失所有的数据?应用程序仍在后台运行,不是吗?我在我的应用程序中使用了相同的范例,但没有看到这种数据丢失。我遇到了这个问题,所以我想是的。很有趣!如果您对是什么导致单例中的数据消失有任何想法,请发布。这引起了我的关注。谢谢