У меня есть фрагмент, который сохраняет состояние через setRetainInstance(true)
. Это очень упрощенный код моего фрагмента:Фрагмент сохраненInstanceState не null после активности, убитого OS
public class MyFragment extends Fragment {
private SomeData mData;
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
if (savedInstanceState == null) {
mData = new SomeData(getView());
} else {
mData.refresh(getView());
}
// More awesome code
}
}
}
Иногда приложение падает с NullPointerException
- мой mData
вдруг становится null
. Это происходит, когда я складываю приложение и возвращаюсь через некоторое время.
У меня есть теория. Спустя некоторое время ОС убивает Activity
и Fragment
(несмотря на то, что setRetainInstance (true)
). Таким образом, создается новый объект моего фрагмента, где mData
инициализирован null
. Но savedInstanseState
не равно нулю. Таким образом, новый фрагмент пропускает инициализацию и пытается вызвать refresh(View)
по нулевой ссылке.
Мой вопрос: Что будет содержать переменную savedInstanseState
в методе onActivityCreated(savedInstanceState)
в моем фрагменте кода, когда ОС убивает активность (когда приложение не на экране) и заново после возвращения?