Почему иногда работает сохранение хеш-таблицы не-Parcelable объектов в onSaveInstanceState ()?

Прочитав вводную книгу по программированию 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, почему приложение вылетало только при нажатии кнопки «Домой», а не при изменении ориентации экрана?

6
задан erichamion 3 March 2011 в 21:02
поделиться