As an alternative, IntentI save the data in a saved headless Fragmentwhen re-creating Activity(my saved object may be quite large and won't fit in size Intent, and I think this is a faster approach than serializing-deserializing in JSON, for example).
I have an idea from this Google documentation , although my implementation is slightly different.
Fragment:
public class DataFragment extends Fragment {
private Data data;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
}
I save my data in this Fragmentin onSaveInstanceState()my method Activity:
@Override
protected void onSaveInstanceState(Bundle outState) {
FragmentManager fm = getSupportFragmentManager();
dataFragment = (DataFragment) fm.findFragmentByTag(TAG_DATA);
if (dataFragment == null) {
dataFragment = new DataFragment();
fm.beginTransaction().add(dataFragment, TAG_DATA).commitNow();
}
dataFragment.setData(myData);
super.onSaveInstanceState(outState);
}
And the corresponding part onCreate():
Data data;
FragmentManager fm = getSupportFragmentManager();
dataFragment = (DataFragment) fm.findFragmentByTag(TAG_DATA);
if (dataFragment == null) {
DatabaseManager dbm = DatabaseManager.getInstance(this);
data = dbm.getData();
} else {
data = dataFragment.getData();
fm.beginTransaction().remove(dataFragment).commitNow();
}
This works flawlessly on orientation changes.
, , , dataFragment.getData() null.
, onCreate() data null:
data = dataFragment.getData();
?
NullPointerException, dataFragment null.
null?