-
应用启动并创建Activity实例后,会调用onCreate(Bundle)、 onStart()和onResume()方法。
-
单击设备的后退键,相当于告诉Android系统: “activity已用完,现在不需要它了。”随即, 系统就销毁了该activity的视图及其内存里的相关信息。这实际是Android系统节约使用设备有限 资源的一种方式。 会调用onPause(),onStop(),onDestory()方法。
-
单击主屏幕,会调用onPause(),onStop()方法。
—————————————————————————————————————————————————————————————
3.2设备旋转与activity生命周期
设备旋转时,系统会销毁当前QuizActivity实例,然后创建一个新的QuizActivity实例。
如何解决这个问题?
为设备配置变更新建备选资源,只要设备旋转至水平方向,Android就会自动发现并识别它。具体做法为在在res目录下创建layout-land目录,然后再在layout-land目录下创建资源文件,具体做法见P53。
—————————————————————————————————————————————————————————————
3.2设备旋转与activity生命周期
要修复这个缺陷,旋转后新建的QuizActivity需要知道mCurrentIndex变量的原值。显然, 在设备运行中发生配置变更时,若设备旋转,需想个办法保存以前的数据。覆盖以下Activity 方法就是一种解决方案:protected void onSaveInstanceState(Bundle outState)
该方法通常在onStop()方法之前由系统调用,除非用户按后退键。(记住,按后退键就是告 诉Android,activity用完了。随后,该activity就完全从内存中被抹掉,自然,也就没有必要为重建保存数据了。
方法onSaveInstanceState(Bundle)的默认实现要求所有activity视图将自身状态数据保存 在Bundle对象中。Bundle是存储字符串键与限定类型值之间映射关系(键值对)的一种结构。
—————————————————————————————————————————————————————————————
覆盖 onSaveInstanceState(Bundle)方法
可通过覆盖onSaveInstanceState(Bundle)方法,将一些数据保存在bundle中,然后在 onCreate(Bundle)方法中取回这些数据。处理设备旋转问题时,将采用这种方式保存mCurrent- Index变量值。
3.7 挑战练习
用户答完某道题,就禁掉那道题对应的按钮,防止用户一题多答。
解答:
新增一个mAnswerOrNot属性,初始为false,代表没有回答该问题。当点击了mTrueButton或者mFalseButton时,设置mTrueButton和mFalseButton为不可点击
updataQuestion函数里添加判断该问题是否回答过的if else分支语句,因为点击上一题或下一题时mTrueButton和mFalseButton是否点击可能会随题目发生改变。
3.8 挑战练习
用户答完全部题后,显示一个toast消息,给出百分比形式的评分。
解答:
Question类里新增一个属性mCorrectOrNot属性用于表示该问题是否回答正确。
mTrueButton和mFalseButton的点击事件里添加一条判断语句用于判断是否为最后一题,若是的话,遍历问题数组中每个对象的mCorrectOrNot属性的值,然后得出结果并转化为百分数显示出来(注:这里的Toast.make函数的一个属性为this时会报错,上网查了改为这个后就行了,但原因还没弄明白)
checkAnswer函数里给每道题的mCorrectOrNot属性赋值,表明该问题是否回答正确。