Прочитав вводную книгу по программированию Android, я захотел изменить пример приложения, чтобы укрепить мое понимание некоторых тем, которые на самом деле не были охвачены. При внесении изменения я допустил ошибку, но мне любопытно, почему в некоторых случаях ошибка срабатывала, а в других - нет.
Действие в приложении сохраняет серию вопросов в Hashtable
, где Question - это небольшой класс, содержащий int и две строки. Как было изначально написано, действие загружает вопросы с сервера каждые onCreate ()
, поэтому я хотел реализовать onSaveInstanceState ()
, чтобы предотвратить некоторые избыточные загрузки. onSaveInstanceState ()
сохраняет Hashtable в Bundle с помощью 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, почему приложение вылетало только при нажатии кнопки «Домой», а не при изменении ориентации экрана?