对于这个面试题,相信大家都见过,网上给出的答案是:

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

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

3、设置Activityandroid: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、不设置Activityandroid:configChanges时,手机和模拟器打印的结果都一样:横竖屏切换都执行一次生命周期

2、设置Activityandroid:configChanges="orientation"时,模拟器打印的结果和上面一样,横竖屏切换都执行一次生命周期:

以示区别,我将onCreate打印成红色

可以看出和上面结果一样。但是在手机上测试就不同了,它只会打印一句话:

3、设置Activityandroid:configChanges="orientation|keyboardHidden"时,手机和模拟器的结果一样:

那么,综上所述:

结论应该是这样:

1、不设置Activityandroid:configChanges横竖屏切换都执行一次生命周期。

2、设置Activityandroid:configChanges="orientation"时,模拟器上横竖屏切换都执行一次生命周期。手机上只执行

onConfigurationChanged方法。

3、设置Activityandroid:configChanges="orientation|keyboardHidden"时,无论在模拟器还是手机上,横竖屏切换都只执行onConfigurationChanged方法。

上面测试模拟器用的2.3.3,手机用2.3和4.1.2都测试过。

大家有兴趣可以用不同版本的手机进行测试下,也许有不同的结果,若留言告知我,在下不胜感激。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android EditText设置不可写
  6. android实现字体闪烁动画的方法
  7. android“设置”里的版本号
  8. Android中dispatchDraw分析
  9. Android四大基本组件介绍与生命周期

随机推荐

  1. 从CM刷机过程和原理分析Android系统结构
  2. android 监听网络状态的变化及实战
  3. Android(4.2) Sensors 学习——G-sensor,
  4. Android练习项目 Mp3播放器实现(一)
  5. Android Studio 基础 之 一键快速实现一
  6. Android中自定义ListView无法响应OnItemC
  7. Android心得3--拨号器
  8. Android中基于心知天气API获取天气信息
  9. Android TV 焦点移动飞框的实现
  10. 说说 Android(安卓)中如何操作音频与视频