带Singleton的OnSaveInstanceState

时间:2012-07-14 14:43:14

标签: java android singleton

我有一个Singleton Data类,用于存储数据。我在不同的Fragment s。

中访问它

加载第一个Fragment时,Singleton中的所有字段都为null都没有问题。当显示第二个Fragment时,它依赖于这些字段来显示其数据。第一个Fragment确保初始化这些字段。

然而,当用户按下第二个Fragment中的主页按钮,并在大约一个小时后再次打开它时,Singleton已丢失其所有数据,而Fragment尝试访问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?
}

欢迎任何帮助。

2 个答案:

答案 0 :(得分:2)

片段是否都托管在同一个Activity中?如果是这样,为什么不将共享状态存储在Activity的成员中,并使用Activity的onSaveInstanceState()和onCreate()来保存和恢复它。在你的片段中,你可以做...

((MyActivityClass)getActivity()).getSharedState()

否则,您可以使您的单例对象管理可以序列化和反序列化的成员对象:

MySingleton.instance().saveTo(outState);
MySingleton.instance().restoreFrom(savedInstanceState);
MySingleton.instance().getState();

哪里

public void restoreFrom(Bundle savedInstanceState) {
    mState = savedInstanceState.getSerializable("DATA");
}

答案 1 :(得分:0)

你可以看看this onSaveInstanceState 方法,如果你需要携带大型物体,这是不可取的。