Activity的横竖屏切换,之探索横屏切换竖屏切时会执行两次的理解

横屏切换竖屏切时会执行两次这个问题一直困扰着我,查了好多资料都无法验证,然后我就将生命周期全部重写,在不同的版本上运行查看日志。最终才发现,横屏切换竖屏执行两次并非所有版本都这样,在2.3版本及以后都验证这句话不符合,但当我尝试到2.2时发现的确这样,当屏幕旋转时会执行两次。

如果你有好奇心可以去下面地址下载android2.2的platforms


http://pan.baidu.com/s/1qXOdsBU



注意:测试需要改清单文件,否则会报错。


一下例子在android4.4上测试结果:

在清单文件中配置该属性:android:configChanges属性

总结:

1、不设置Activityandroid:configChanges切屏会重新调用各个生命周期切横屏时会执行一次切竖屏时会执行两次

2、设置Activityandroid:configChanges="orientation"切屏还是会重新调用各个生命周期切横、竖屏时只会执行一次

3、设置Activityandroid:configChanges="orientation|keyboardHidden"切屏不会重新调用各个生命周期只会执行onConfigurationChanged方法

注意:自从Android 3.2API 13),在设置Activityandroid:configChanges="orientation|keyboardHidden"后,还是一样会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。因此,阻止程序在运行时重新加载Activity,除了设置"orientation"你还必须加上"ScreenSize"

不设置android:configChanges情况下:

测试代码:

public classMainActivity extends Activity {

        

         privateString TAG="MainActivity";

         @Override

         protectedvoid onCreate(Bundle savedInstanceState) {

                  super.onCreate(savedInstanceState);

                  setContentView(R.layout.activity_main);

                  Log.i(TAG,"onCreate");

         }

         @Override

         protectedvoid onStart() {

                  super.onStart();

                  Log.i(TAG,"onStart");

         }

         @Override

         protectedvoid onRestoreInstanceState(Bundle savedInstanceState) {

                  super.onRestoreInstanceState(savedInstanceState);

                  Log.i(TAG,"onRestoreInstanceState");

         }

         @Override

         protectedvoid onResume() {

                  super.onResume();

                  Log.i(TAG,"onResume");

         }

         @Override

         protectedvoid onPause() {

                  super.onPause();

                  Log.i(TAG,"onPause");

         }

         @Override

         protectedvoid onSaveInstanceState(Bundle outState) {

                  super.onSaveInstanceState(outState);

                  Log.i(TAG,"onSaveInstanceState");

         }

         @Override

         protectedvoid onStop() {

                  super.onStop();

                  Log.i(TAG,"onStop");

         }

         @Override

         protectedvoid onDestroy() {

                  super.onDestroy();

                  Log.i(TAG,"onDestroy");

         }      

}

屏幕切换activity的生命周期执行:

竖屏切换横屏:(结束掉当前activity,重新创建新的activity)

运行中的activity----onPause-----onStop-----onDestroy-----onCreate------onStart---------onRsume


横屏切换竖屏

运行中的activity----onPause-----onStop-----onDestroy-----onCreate------onStart---------onRsume


注意:前三个和后三个不属于同一个生命周期。


android2.2测试结果:

注:仅仅输出了横屏切换竖屏


android4.4仅仅横屏切换竖屏:


另外,值得注意的是,生命周期的执行顺序有所不同,主要表现在onSaveInstanceState和onRestoreInstanceState

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值