java - 单例的 OnSaveInstanceState

标签 java android singleton

我有一个 Singleton Data 类,我用它来存储数据。我在不同的 Fragment 中访问它。

当加载第一个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?
}

欢迎任何帮助。

最佳答案

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

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

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

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

在哪里

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

关于java - 单例的 OnSaveInstanceState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484627/

相关文章:

java - 优先级会影响同一台计算机上的其他程序吗?

android - 如何阻止 LinearLayout 宽度?

android - 如何在应用内计费应用程序android中调用getpurchase方法?

c++ - 如何初始化对在单独文件中声明的类的引用?

c++ - 未定义对构造函数的引用,当我明确拥有它时 "type out"

java - 非静态变量不能被引用

java - Main 必须是抽象的,ActionPerformed 方法与 Listener 存在问题

java - 卡住/编译和管道 java python 应用程序?

java - 暂停 Android 应用程序,直到提供输入

python - 为什么这个单例实现是 "not thread safe"?