Android 横竖屏切换生命周期
学好Android 首要研究Activity的生命周期, 研究一下Activity生命周期的横屏竖屏切换回调函数 测试环境 : eclipse + Android手机
1、新建一个 Activity,并将把各个生命周期打印出来。
2、运行Activity,得到如下信息
onCreate------
onStart------
onResume------
3、切换成横屏时
onSaveInstanceState------
onPause------
onStop------
onDestroy------
onCreate------
onStart------
onRestoreInstanceState------
onResume------
4、再切换成竖屏时,发现打印了两次相同的log
onSaveInstanceState------
onPause------
onStop------
onDestroy------
onCreate------
onStart------
onRestoreInstanceState------
onResume------
onSaveInstanceState------
onPause------
onStop------
onDestroy------
onCreate------
onStart------
onRestoreInstanceState------
onResume------
5、修改AndroidManifest.xml,添加 android:configChanges=”orientation” 后切换屏幕
onSaveInstanceState------
onPause------
onStop------
onDestroy------
onCreate------
onStart------
onRestoreInstanceState------
onResume------
6、再切换屏幕,发现不会再打印相同信息,但多打印了一行onConfigChanged
onSaveInstanceState------
onPause------
onStop------
onDestroy------
onCreate------
onStart------
onRestoreInstanceState------
onResume------
onConfigurationChanged------
| 7、配置文件中的 android:configChanges=”orientation” 改成 android:configChanges=”orientation | keyboardHidden”,切换屏幕,就只打印 |
onConfigurationChanged------
onConfigurationChanged------
8、执行步骤切换屏幕
onConfigurationChanged------
onConfigurationChanged------
总结:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期, 切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调 用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges=”orientation|keyboardHidden”时, 切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
4、当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
Activity运行时按下HOME键和被完全覆盖是一样的:
onSaveInstanceState ------
onPause ------
onStop ------
onRestart ------
onStart-------
onResume
Activity未被完全覆盖只是失去焦点:
onPause-------
onResume ------
5、运行时生命周期的变化官方文档http://developer.android.com/guide/topics/resources/runtime-changes.html
6、至于 android:configChanges=”orientation”就是 Activity 中 onConfigurationChanged 方法需要监听到的事件类型。 请参考 Android之屏幕方向改变以及onConfigurationChanged事件