Прочитав вводную книгу по программированию для Android, я захотел изменить пример приложения, чтобы закрепить мое понимание некоторых тем, которые на самом деле не были затронуты.При внесении изменений я допустил ошибку, но мне любопытно, почему ошибка работала в некоторых случаях, но не в других.
Деятельность в приложении сохраняет серию вопросов в Hashtable<Integer, 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 или как его реализовать.Я только знал, что была проблема, когда я нажимал клавишу home на эмуляторе и приложение молча, невидимо зависало без вывода LogCat.Трассировка стека подтолкнула меня к поиску Parcelable и заставила Question реализовать его.
Мой вопрос не в том, что я сделал неправильноВопрос в следующем: Когда класс Question не реализовал Parcelable, почему приложение зависало только при нажатии Home, а не при изменении ориентации экрана?