华为M6 (android 10)
1. 横竖屏切换
android:configChanges | 切横屏生命周期 | 切竖屏生命周期 | 总结 |
---|---|---|---|
不设置 | onPause() onDestroy() onCreate() onResume() | onPause() onDestroy() onCreate() onResume() | 横竖屏切换activity都只重新创建一次。 (网上说的切横屏onCreate()执行一个,切竖屏onCreate()执行两次应该是android早期版本的效果,现在都只创建一次) |
“orientation|keyboardHidden” | onPause() onDestroy() onCreate() onResume() | onPause() onDestroy() onCreate() onResume() | 同不设置,横竖屏切换activity都只重新创建一次。 (网上说的只设置这个就可以不用重新创建activity,也是android早期版本的效果,现在还需要加screenSize) |
“orientation|keyboardHidden|screenSize” | onConfigurationChanged() | onConfigurationChanged() | 不论怎么转都只执行onConfigurationChanged() |
2. 切后台再显示
测试横竖屏时顺带测了切后台再显示,表格中三种情况都是切后台执行一次onPause()
,再显示执行两次。在onResume()
onRestart()
方法中也打印了onResume
导致认为执行了两次onResume()
,其实再显示是先执行了一次onRestart()
,再执行一次onResume()
。
具体 Activity 生命周期如下表:
首次创建 | 跳转其它Activity 或切后台 或息屏 | 再显示 | 销毁 |
---|---|---|---|
onCreate() onStart() onResume() | onPause() onStop() | onRestart() onStart() onResume() | onPause() onStop() onDestroy() |
除了跳转其它Activity、切后台、息屏会触发生命周期的onPause、onStop,其它覆盖Activity的情况都不会影响生命周期,具体情况有:
- 在容器内显示/移除Fragment
- 在容器内显示/移除自定义View
- 弹出/关闭Dialog
- 弹出/关闭PopupWindow
- 下拉显示通知栏/关闭通知栏
3. 横竖屏切换变换layout-land和layout-port布局
android:configChanges
不设置或者只设置"orientation|keyboardHidden",activity的onCreate()方法会重新执行,会重新触发setContentView(R.layout.xxxx),系统会根据屏幕横竖屏状态再次选择使用layout-land中布局还是layout-port中布局。
android:configChanges
设置"orientation|keyboardHidden|screenSize",activity只执行onConfigurationChanged(),所以横竖屏切换前显示的是layout-land和layout-port中的哪种布局,切换后显示的还是那种布局,要想切换必须在onConfigurationChanged()方法中添加对布局的改变方法
,至于添加什么方法还没有好的思路。