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

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都测试过。

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

测试横竖屏切换时activity 的生命周期的更多相关文章

  1. 横竖屏切换时,Activity的生命周期

    横竖屏切换时,Activity的生命周期 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->onRe ...

  2. 横竖屏切换时Activity的生命周期

    设置横竖屏切换时Activity生命周期的属性设置,在清单文件中的Activity节点中设置.根据具体需求设置: 1.不设置Activity的android:configChanges时,切屏会重新调 ...

  3. Andriod开发---《横竖屏切换时 Activity的生命周期的总结》

    横屏切换竖屏Activity的生命周期详解,下面分析一下切换时具体的生命周期: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--&g ...

  4. Android(java)学习笔记224:横竖屏切换时Activity的生命周期

    1.横竖屏切换的生命周期     默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...

  5. 安卓横竖屏切换时activity的生命周期

    关于Activity横竖屏切换的声明周期变化: 1.新建一个Activity并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->on ...

  6. Android(java)学习笔记167:横竖屏切换时Activity的生命周期

    1.横竖屏切换的生命周期     默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...

  7. 横竖屏切换时候Activity的生命周期的总结

    1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3.按crtl+ ...

  8. 横竖屏切换时候Activity的生命周期

    1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->onResume--> 3.按crtl+f1 ...

  9. android 横竖屏切换不重走生命周期

    android在系统配置发生改变时,Activity会被重新创建,但是某些情况下我们希望系统配置改变时不会重新创建Activity,这个时候我们可以给Activity指定相对应的configChang ...

随机推荐

  1. BZOJ 1406: [AHOI2007]密码箱( 数论 )

    (x+1)(x-1) mod N = 0, 枚举N的>N^0.5的约数当作x+1或者x-1... ------------------------------------------------ ...

  2. ExtJS4.2学习(三)——入门基础

    1.怎么给某一组件注册事件? 先画一个组件,然后在控制器中加入对这个组件的处理(包括组件对应的方法调用和方法定义). 2.ExtJS4的提示框和JS的差异: ExtJS4:一步走完程序: JS:让程序 ...

  3. linux杂记(六)档案权限

    [KANO@kelvin ~]$ ls -al 总用量 drwx------. KANO KANO 10月 : . drwxr-xr-x. root root 9月 : .. drwxrwxr-x. ...

  4. halcon与C#混合编程

    halcon源程序: dev_open_window(0, 0, 512, 512, 'black', WindowHandle)read_image (Image, 'C:/Users/BadGuy ...

  5. .NET 条件查询实现--类似网上商城宝贝搜索

    需要实现的效果:点击表格列头:弹出一个层,用户可以输入当前列头的查询条件,点击确定之后,把该列头的查询信息显示在页面顶部,用户可以叉掉这个查询条件,恢复到查询之前的数据. 大致实现的效果图: 项目背景 ...

  6. 浅谈Java泛型中的extends和super关键字(转)

    通配符 在本文的前面的部分里已经说过了泛型类型的子类型的不相关性.但有些时候,我们希望能够像使用普通类型那样使用泛型类型: 向上造型一个泛型对象的引用 向下造型一个泛型对象的引用 向上造型一个泛型对象 ...

  7. linux c in common use function reference manual

    End User License Agreement guarantees or warranties,大战前得磨刀!!!!! Tips:C Funcs Chk header Modules!

  8. 龟兔赛跑(DP)

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. java设计模式(二)单例模式 建造者模式

    (三)单例模式 单例模式应该是最常见的设计模式,作用是保证在JVM中,该对象仅仅有一个实例存在. 长处:1.降低某些创建比較频繁的或者比較大型的对象的系统开销. 2.省去了new操作符,减少系统内存使 ...

  10. 假设给Contact的List加一个用字母排序的导航

    效果图: 这样写Layout: <? xml version="1.0" encoding="utf-8"? > <LinearLayout ...