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

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 1037: [ZJOI2008]生日聚会Party( dp )

    dp(i, j, a, b)表示选了i个男生, j个女生, 后缀中男生比女生多a(最多), 女生比男生多b(最多). dp(i+1, j, a+1, max(0, b-1)) += dp(i, j, ...

  2. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )

    假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题,  差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...

  3. ROS中编辑文件命令行工具rosed

    rosed是rosbash套件中的一个,它允许我们通过包名直接编辑包中的文件,而不是输入包的全部路径. 用法: rosed [package_name] [filename] 例如: rosed ro ...

  4. memcached look status

    $ STAT pid STAT STAT STAT version STAT pointer_size STAT rusage_user 7.054927 STAT rusage_system 14. ...

  5. TinyFox 部署在CentOS7 中测试使用

    一:TinyFox介绍 TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本身的功能是htm ...

  6. 新视野OJ 2705 [SDOI2012]Longge的问题 (数论)

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2705 题解:求 sigma(gcd(i,n), 1<=i<=n<2^32) ...

  7. Android ActionBar详解(一)--->显示和隐藏ActionBar

    MainActivity如下: package cc.testsimpleactionbar0; import android.os.Bundle; import android.view.View; ...

  8. ORA-31626:作业不存在 ORA-31633:无法创建主表"XXX.SYS_IMPORT_FULL_05"

    错误代码: ORA-31626:作业不存在 ORA-31633:无法创建主表"XXX.SYS_IMPORT_FULL_05" ORA-06512:在"SYS.DBMS_S ...

  9. 安装CAD出现Error 1904.Module的解决方法

    在安装AutoCAD2008时,安装过程中出现了一个小错误,虽然说不影响使用,也不影响功能,但还是需要把这个问题解决,今天就和大家分享解决这个问题的方法. 错误描述 会在安装过程中出现错误提示:Err ...

  10. Qt在windows与Mac OS中获取执行程序版本号

    1 windows中获取执行文件exe的版本号   QString GetFileVertion(QString aFullName) { QString vRetVersion; string vF ...