Android
来源:互联网 发布:成都人工智能公司 编辑:程序博客网 时间:2024/06/08 02:39
前言
刚看到这个问题的时候,觉得横竖屏切换Activity的状态不会改变,所以测试了一下,才发现默认情况下每次横竖屏切换的时候,Activity都会销毁重新创建。因此,将这块内容记录下来,自己总结一下,并分享给大家。
1.代码部分
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState != null) { savedInstanceState.getString("name"); savedInstanceState.getInt("age"); } Log.e("main","--------------onCreate"); } @Override protected void onStart() { super.onStart(); Log.e("main","--------------onStart"); } @Override protected void onResume() { super.onResume(); Log.e("main","--------------onResume"); } @Override protected void onPause() { super.onPause(); Log.e("main","--------------onPause"); } @Override protected void onStop() { super.onStop(); Log.e("main","--------------onStop"); } @Override protected void onRestart() { super.onRestart(); Log.e("main","--------------onRestart"); } @Override protected void onDestroy() { super.onDestroy(); Log.e("main","--------------onDestroy"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("name","Lily"); outState.putInt("age",16); Log.e("main","-------------->onSaveInstanceState"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { savedInstanceState.putString("name","Lily"); savedInstanceState.putInt("age",16); super.onRestoreInstanceState(savedInstanceState); Log.e("main","-------------->onRestoreInstanceState"); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Log.e("main","横屏转竖屏"); } else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Log.e("main","竖屏转横屏"); } }
2.结果分析
以下测试结果都是在Android 6.0手机上测试得出:
(1)默认情况下,在AndroidManifest.xml中不设置Activity 的 configChanges属性,在横竖屏切换时,Activity每次都会执行一次完整的生命周期。
执行结果:
(2)在AndroidManifest.xml中设置Activity 的 configChanges属性为“orientation”,在横竖屏切换时,Activity每次也都会执行一次完整的生命周期。
执行结果:
(3)在AndroidManifest.xml中设置Activity 的 configChanges属性为“orientation|keyboardHidden”,在横竖屏切换时,Activity每次也都会执行一次完整的生命周期。
执行结果:
(4)在AndroidManifest.xml中设置Activity 的 configChanges属性为“orientation|keyboardHidden|screenSize”,在横竖屏切换时,Activity只会执行一次完整的生命周期,并且每次横竖屏切换时都会回调onConfigurationChanged方法。
执行结果:
3.总结
只有在AndroidManifest.xml中设置Activity 的 configChanges属性为“orientation|keyboardHidden|screenSize”时,Activity的生命周期只执行一次,其他的都是在横竖屏切换时销毁Activity并重新创建,即每次都会执行一次完整的生命周期。
不过在低版本的手机中,只需要设置 configChanges属性为“orientation|keyboardHidden”,Activity的生命周期就会只执行一次。
注意:
当Activity横竖屏切换时,Activity会销毁并重新创建,那么,Activity销毁前的数据也会被销毁,所以当横竖屏切换时,我们需要在onSaveInstanceState方法中保存临时数据和状态,该方法会在活动销毁前回调。切换后,回调onRestoreInstanceState方法恢复数据和状态。
如果有错误之处,请予以纠正,不要让错误之处误导他人。
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- android:
- spark-调优-shuffle
- ActionContext 、ServletContext 和 ServletActionContext 的区别
- 错位的字符串问题
- 算法第三周 3Sum[medium]
- 《Java编程思想》前四章
- Android
- hdu1505最大子矩阵(输入超级坑)
- ARCGIS读取Excell数据生成多边形Python脚本
- linux Centos下安装jdk
- Ponds HDU
- IceCTF 2016
- 算法小进步
- HTML——HTML中的特殊符号
- 函数节流与防抖(参考lodash)