setRetainInstance(true)
によって状態を保存するフラグメントがあります。これは私のフラグメントの非常に単純化されたコードです:NullPointerException
とOSによって殺されたアクティビティの後でフラグメントのsavedInstanceStateがnullでない
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
}
}
}
時々、アプリがクラッシュ - 私のmData
が突然null
になります。これは、アプリケーションを折り畳んでしばらくしてから戻ると起こります。
私はいくつかの理論を持っています。しばらくすると、OSはActivity
とFragment
を殺す(setRetainInstance (true)
にもかかわらず)。こうして、私のフラグメントの新しいオブジェクトを作成します。ここで、で初期化されたmData
です。しかし、savedInstanseState
はnullと等しくありません。したがって、新しいフラグメントは初期化をスキップし、NULL参照でrefresh(View)
を呼び出そうとします。
私の質問:OSがアクティビティ(アプリではない、画面上)と再作成復帰後を殺すとき は何私のスニペットでonActivityCreated(savedInstanceState)
方法でsavedInstanseState
変数が含まれているのだろうか?答えはわからない