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

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 { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("onCreate", "执行onCreate方法");
} @Override
protected void onStart() {
super.onStart();
Log.i("onStart", "执行onStart方法");
} @Override
protected void onResume() {
super.onResume();
Log.i("onResume", "执行onResume方法");
} @Override
protected void onPause() {
super.onPause();
Log.i("onPause", "执行onPause方法");
} @Override
protected void onStop() {
super.onStop();
Log.i("onStop", "执行onStop方法");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.i("onDestroy", "执行onDestroy方法");
} @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i("onConfigurationChanged", "执行onConfigurationChanged方法");
} @Override
protected void onRestart() {
super.onRestart();
Log.i("onRestart", "执行onRestart方法");
} @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i("onSaveInstanceState", "执行onSaveInstanceState方法");
} @Override
protected 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都测试过。

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

最新文章

  1. 学习RaphaelJS矢量图形包--Learning Raphael JS Vector Graphics中文翻译(一)
  2. util.js
  3. Linux 文件基本属性
  4. [css] haslayout
  5. JavaScript--基本包装类型(13)
  6. oracle Execute Immediate 用法
  7. mysql-5.7.10-winx64 安装时遇到的问题
  8. C#学习(三)
  9. 未找到具有固定名称“System.Data.SQLite”的 ADO.NET 提供程序的实体框架提供程序
  10. 【微服务轻量化容器技术相关】同事分享的Docker学习汇总
  11. vue结合axios使用入门
  12. 解决使用maven的java web项目导入后出现的有关问题 -cannot be read or is not a valid ZIP file
  13. 在sql中case子句的两种形式
  14. html页面转jsp后 乱码问题。
  15. Tarjan学习笔记
  16. apache、nginx的虚拟域名配置和rewrite配置,以及web缓存的几种方式
  17. sql语句——行列互换
  18. How can I get the baseurl of site?
  19. CentOS 7下启动postfix服务报错:fatal: parameter inet_interfaces: no local interface found for ::1
  20. docker overlay存储驱动介绍(传送门)

热门文章

  1. 小鱼提问1 类中嵌套public修饰的枚举,外部访问的时候却只能Class.Enum这样访问,这是为何?
  2. A - 数塔
  3. BZOJ 3514: Codechef MARCH14 GERALD07加强版( LCT + 主席树 )
  4. IOS自学笔记1——学前准备
  5. 树莓派高级GPIO库,wiringpi2 for python使用笔记(三)GPIO操作
  6. 常见iis错误之一
  7. Codeblock解决注释乱码问题及在ubuntu中程序运行时乱码问题。
  8. UVA - 297Quadtrees(四分图)
  9. Summer Holiday(强联通入度最小点)
  10. Android开发(26)--补间动画(Tween)的实现