Android プログラミングの入門書を読んだ後、実際にはカバーされていないいくつかのトピックの理解を深めるために、サンプル アプリケーションを変更したいと考えました。変更を行う際にエラーが発生しましたが、エラーが機能する場合と機能しない場合がある理由が知りたいです。
アプリケーション内のアクティビティは、一連の質問を に格納しますHashtable<Integer, Question>
。ここで、Question は、int と 2 つの String を保持する小さなクラスです。最初に書かれたように、アクティビティはすべてのサーバーから質問をダウンロードするため、重複したダウンロードを防ぐため onCreate()
に実装したいと考えました。を使用してハッシュテーブルをバンドルに保存します。onSaveInstanceState()
onSaveInstanceState()
putSerializable()
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// mQuestions is a member variable of
// type Hashtable<Integer, Question>
if (mQuestions != null && mQuestions.size() > 0) {
outState.putSerializable(SAVED_QUESTIONS, mQuestions);
}
}
Parcelable とは何か、またはその実装方法を知る前でさえ、画面の向きの変更に対して完全に機能しました。エミュレーターのホーム キーを押したときに問題が発生したことだけがわかりました。アプリは静かにクラッシュし、LogCat の出力はありませんでした。スタック トレースにより、Parcelable を検索し、Question に実装させました。
私の質問は、私が間違ったことではありません。問題は次のとおりです。Question クラスが Parcelable を実装していない場合、アプリがホームを押したときにのみクラッシュし、画面の向きが変わったときではないのはなぜですか?