横竖屏切换时候Activity的生命周期变化

横竖屏切换时候Activity的生命周期变化

对于横竖屏幕的切换,Activity的不同生命周期的变化,自己亲自用真机调试测试了一下,总结如下:

Activity类:

package com.example.screenorientationchange;

import android.support.v7.app.ActionBarActivity;
import android.content.res.Configuration;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.out.println("-----------onCreate-----------------");
	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		System.out.println("-----------onStart-----------------");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		System.out.println("-----------onRestart-----------------");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		System.out.println("-----------onResume-----------------");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		System.out.println("-----------onPause-----------------");
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		System.out.println("-----------onStop-----------------");
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		System.out.println("-----------onDestroy-----------------");
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		// TODO Auto-generated method stub
		super.onConfigurationChanged(newConfig);
		System.out
				.println("-----------onConfigurationChanged-----------------");
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		// TODO Auto-generated method stub
		super.onSaveInstanceState(outState);
		System.out.println("-----------onSaveInstanceState-----------------");
	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onRestoreInstanceState(savedInstanceState);
		System.out
				.println("-----------onRestoreInstanceState-----------------");
	}

}

当启动程序时,info信息里面打印出来的结果是(默认是竖屏)

当切换到横屏时打印信息如下,可以看到重新Create了一个Activity,

当再次切换回到竖屏时,打印信息如下(紫色横线下面),又再一次重新onCreate了一个Activity。

下面我们去AndroidMainifest.xml中配置一下android:configChanges=" "参数

先说一下android:configChanges=" "参数类型的代表含义:

"mcc" 国际移动用户识别码所属国家代号是改变了-----  sim被侦测到了,去更新mcc    mcc是移动用户所属国家代号
"mnc" 国际移动用户识别码的移动网号码是改变了------ sim被侦测到了,去更新mnc    MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
"locale" 地址改变了-----用户选择了一个新的语言会显示出来
"touchscreen" 触摸屏是改变了------通常是不会发生的
"keyboard" 键盘发生了改变----例如用户用了外部的键盘
"keyboardHidden" 键盘的可用性发生了改变
"navigation" 导航发生了变化-----通常也不会发生
"screenLayout" 屏幕的显示发生了变化------不同的显示被激活
"fontScale" 字体比例发生了变化----选择了不同的全局字体
"uiMode" 用户的模式发生了变化
"orientation" 屏幕方向改变了
"screenSize" 屏幕大小改变了
"smallestScreenSize" 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

修改AndroidManifest.xml,把该Activity添加 android:configChanges="orientation"

    <activity
            android:name=".MainActivity"
            <span style="background-color: rgb(255, 255, 153);">android:configChanges="orientation"</span>
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
     </activity>

然后运行程序,可以看到打印信息跟没有配置之前是一模一样的。

然后重新修改AndroidManifest.xml,把该Activity添加 android:configChanges="orientation|screenSize"

        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|screenSize"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

打印结果如下:

此时没有重新create一个Activity,只是调用了onConfigurationChange方法,无论你怎么切换,只会调用这一个方法了。

总结:

1、不设置Activity的android:configChanges=""和设置为android:configChanges="orientation"时,两种情况结果是一样的。都重新oncreate

了一个Activity。(我是真机调试的,系统是4.1的, 版本设置是android:minSdkVersion="8" android:targetSdkVersion="21")。

在网上百度了一下,原因是这样的,自从Android3.2(API 13)系统之后,随着横竖屏的切换screen size也随着改变,所以,

在AndroidManifest.xml里设置MiniSdkVersion和TargetSdkVersion属性大于13的情况下,除了设置”orientation“还要设置”screensize“.

2、当设置android:configChanges="orientation|screensize"之后,横竖屏的切换就不再会重新调用各个生命周期,之后执行onConfigurationChanged方法。

时间: 2025-01-13 00:39:20

横竖屏切换时候Activity的生命周期变化的相关文章

Activity 在横竖屏切换情况下的生命周期变化

title: Activity 在横竖屏切换情况下的生命周期变化 date: 2018-04-26 23:05:57 tags: [Activity] categories: [Mobile,Android] --- 概述 Activity 在横竖屏切换的时候,生命周期是不一样的,本地通过打印 log 的方式,看下区别.测试的机器是 Android6.0 . 不做任何配置的情况下 第一次启动 D/LifeCircleActivity: onCreate() called with: savedI

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

1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3.按crtl+f12切换成横屏时 onSaveInstanceState--> onPause--> onStop--> onDestroy--> onCreate--> onStart--> onRestoreInstanceState--> onResume--> 4.再

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

设置横竖屏切换时Activity生命周期的属性设置,在清单文件中的Activity节点中设置.根据具体需求设置: 1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次. 2.设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横.竖屏时只会执行一次. 3.设置Activity的android:configChanges=&

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

1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->onResume--> 3.按crtl+f12切换成横屏时 onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume--> 4.再按crtl+f12

横竖屏切换,activity的生命周期

1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 2.设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横.竖屏时只会执行一次 3.设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行o

切换横竖屏的时候Activity的生命周期变化情况

关于这个,有个博客说得比较清楚:http://blog.csdn.net/wulianghuan/article/details/8603982,直接给出链接,哈哈哈.

Android Configuration横竖屏切换时Activity生命周期调用

问题:横竖屏切换时Activity的生命周期? 测试环境:华为mate7 package com.virglass.beyond.activity; import android.app.Activity; import android.content.res.Configuration; import android.os.Bundle; import com.virglass.beyond.utils.LogUtil; /** * 系统设置更改 * @author Administrator

Android 面试之横竖屏切换的Activity生命周期

public class EngineerJspActivity extends Activity { private static String Tag = "EngineerJspActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(Tag, "onCreate()"); setCont

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

android在系统配置发生改变时,Activity会被重新创建,但是某些情况下我们希望系统配置改变时不会重新创建Activity,这个时候我们可以给Activity指定相对应的configChanges属性,在manifest加入 android:configChanges="keyboardHidden|orientation|screenSize" orientation:屏幕方向发生了改变,如旋转屏幕 screenSize:屏幕尺寸发生了变化,如旋转屏幕 keyboardHid