nha*_*man 7 java singleton android
我有一个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?
}
Run Code Online (Sandbox Code Playgroud)
欢迎任何帮助.
这些片段是否都托管在同一个活动中?如果是这样,为什么不将共享状态存储在 Activity 的成员中,并使用 Activity 的 onSaveInstanceState() 和 onCreate() 来保存和恢复它。在你的片段中,你可以做...
((MyActivityClass)getActivity()).getSharedState()
Run Code Online (Sandbox Code Playgroud)
否则,你可以让你的单例对象管理一个可以序列化和反序列化的成员对象:
MySingleton.instance().saveTo(outState);
MySingleton.instance().restoreFrom(savedInstanceState);
MySingleton.instance().getState();
Run Code Online (Sandbox Code Playgroud)
在哪里
public void restoreFrom(Bundle savedInstanceState) {
mState = savedInstanceState.getSerializable("DATA");
}
Run Code Online (Sandbox Code Playgroud)