在阅读了一本介绍性的 Android 编程书籍之后,我想修改示例应用程序,以巩固我对一些没有真正涵盖的主题的理解。在进行更改时,我犯了一个错误,但我很好奇为什么该错误在某些情况下有效,而在其他情况下无效。
应用程序中的一个活动将一系列问题存储在 a 中Hashtable<Integer, Question>
,其中 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 时,为什么应用程序只在按 Home 而不是在屏幕方向更改时崩溃?