测试横竖屏切换时activity 的生命周期
对于这个面试题,相信大家都见过,网上给出的答案是:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
然而,我在测试的时候,发现并不是这样,下面写了一个简单的测试类,代码如下:
Activity:
package com.home.activity;import android.os.Bundle;import android.util.Log;import android.app.Activity;import android.content.res.Configuration;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i("onCreate", "执行onCreate方法");}@Overrideprotected void onStart() {super.onStart();Log.i("onStart", "执行onStart方法");}@Overrideprotected void onResume() {super.onResume();Log.i("onResume", "执行onResume方法");}@Overrideprotected void onPause() {super.onPause();Log.i("onPause", "执行onPause方法");}@Overrideprotected void onStop() {super.onStop();Log.i("onStop", "执行onStop方法");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i("onDestroy", "执行onDestroy方法");}@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);Log.i("onConfigurationChanged", "执行onConfigurationChanged方法");}@Overrideprotected void onRestart() {super.onRestart();Log.i("onRestart", "执行onRestart方法");}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);Log.i("onSaveInstanceState", "执行onSaveInstanceState方法");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);Log.i("onRestoreInstanceState", "执行onRestoreInstanceState方法");}}
下面来分析打印结果:
我分别用手机和模拟器进行测试过,发现它们有点区别:
1、不设置Activity的android:configChanges时,手机和模拟器打印的结果都一样:横竖屏切换都执行一次生命周期
2、设置Activity的android:configChanges="orientation"时,模拟器打印的结果和上面一样,横竖屏切换都执行一次生命周期:
以示区别,我将onCreate打印成红色
可以看出和上面结果一样。但是在手机上测试就不同了,它只会打印一句话:
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,手机和模拟器的结果一样:
那么,综上所述:
结论应该是这样:
1、不设置Activity的android:configChanges时,横竖屏切换都执行一次生命周期。
2、设置Activity的android:configChanges="orientation"时,模拟器上横竖屏切换都执行一次生命周期。手机上只执行
onConfigurationChanged方法。
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,无论在模拟器还是手机上,横竖屏切换都只执行onConfigurationChanged方法。
上面测试模拟器用的2.3.3,手机用2.3和4.1.2都测试过。
大家有兴趣可以用不同版本的手机进行测试下,也许有不同的结果,若留言告知我,在下不胜感激。
更多相关文章
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用
- python list.sort()根据多个关键字排序的方法实现
- android上一些方法的区别和用法的注意事项
- android EditText设置不可写
- android实现字体闪烁动画的方法
- android“设置”里的版本号
- Android中dispatchDraw分析
- Android四大基本组件介绍与生命周期