android-----横竖屏切换对Activity生命周期的影响

前面我们分析过Activity的生命周期(见:android-----Activity生命周期),但是在现实应用中我们可能会对手机进行横竖屏切换,那么这样的切换对Activity的生命周期有什么影响呢?

先来看看实例:

public class Activity1 extends Activity{
	public Button mButton;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lifecycle);
		System.out.println("Activity1----->onCreate");
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		System.out.println("Activity1----->onDestroy");
	}

	@Override
	protected void onPause() {
		super.onPause();
		System.out.println("Activity1----->onPause");
	}

	@Override
	protected void onRestart() {
		super.onRestart();
		System.out.println("Activity1----->onRestart");
	}

	@Override
	protected void onResume() {
		super.onResume();
		System.out.println("Activity1----->onResume");
	}

	@Override
	protected void onStart() {
		super.onStart();
		System.out.println("Activity1----->onStart");
	}

	@Override
	protected void onStop() {
		super.onStop();
		System.out.println("Activity1----->onStop");
	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);
		System.out.println("Activity1----->onRestoreInstanceState");
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		System.out.println("Activity1----->onSaveInstanceState");
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
		{
			System.out.println("现在是横屏转竖屏");
		}else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
		{
			System.out.println("现在是竖屏转横屏");
		}
	}
}

横竖屏切换涉及到的是Activity的android:configChanges属性,而与其android:launchMode属性没有关系;

android:configChanges可以设置的属性值有:

(1)orientation:消除横竖屏的影响

(2)keyboardHidden:消除键盘的影响

(3)screenSize:消除屏幕大小的影响

当我们设置Activity的android:configChanges属性为orientation或者orientation|keyboardHidden或者不设置这个属性的时候,Logcat输出如下:

刚刚启动Activity的时候:

Activity1----->onCreate

Activity1----->onStart

Activity1----->onResume

模拟器中按下Ctrl+F11或者Ctrl+F12由竖屏切换到横屏:

Activity1----->onPause

Activity1----->onSaveInstanceState

Activity1----->onStop

Activity1----->onDestroy

Activity1----->onCreate

Activity1----->onStart

Activity1----->onRestoreInstanceState

Activity1----->onResume

模拟器中按下Ctrl+F11或者Ctrl+F12由横屏切换到竖屏:

Activity1----->onPause

Activity1----->onSaveInstanceState

Activity1----->onStop

Activity1----->onDestroy

Activity1----->onCreate

Activity1----->onStart

Activity1----->onRestoreInstanceState

Activity1----->onResume

当我们设置Activity的android:configChanges属性为orientation|screenSize或者orientation|screenSize|keyboardHidden,Logcat输出如下:

刚刚启动Activity的时候:

Activity1----->onCreate

Activity1----->onStart

Activity1----->onResume

模拟器中按下Ctrl+F11或者Ctrl+F12由竖屏切换到横屏:

现在是竖屏转横屏

模拟器中按下Ctrl+F11或者Ctrl+F12由横屏切换到竖屏:

现在是横屏转竖屏

可以发现在设置了orientation|screenSize属性之后,在进行横竖屏切换的时候调用的方法是onConfigurationChanged,而不会重新加载Activity的各个生命周期;

还有一点需要注意的是在进行横竖屏切换的时候在调用onStop之前会调用onSaveInstanceState来进行Activity的状态保存,随后在重新显示该Activity的onResume方法之前会调用onRestoreInstanceState来恢复之前由onSaveInstanceState保存的Activity信息;

当然在显示中我们可以屏蔽掉横竖屏的切换操作,这样就不会出现切换的过程中Activity生命周期重新加载的情况了,具体做法是,在Activity中加入如下语句:

android:screenOrientation="portrait" 始终以竖屏显示

android:screenOrientation="landscape" 始终以横屏显示

如果不想设置整个软件屏蔽横竖屏切换,只想设置屏蔽某个Activity的横竖屏切换功能的话,只需要下面操作:

Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);以竖屏显示

Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);以横屏显示

时间: 2024-10-14 12:06:59

android-----横竖屏切换对Activity生命周期的影响的相关文章

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开发之activity横竖屏切换时的生命周期以及横竖屏切换时的资源适配方案

背景:之前有过两篇写activity的博客 android之activity的生命周期详解:详细介绍了activity的整个生命周期.各状态间的转换和返回桌面时保存activity的状态 android之activity中onSaveInstanceState和onRestoreInstanceState的触发时机:介绍了activity中这两个方法的触发时机和作用 本篇博客会牵扯到里面的内容,如果你都有所了解可以直接往下看,如果不了解可以进去回忆下. 问题:在做应用的退出对话框时,发现如果对话

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

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

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

OnCreate()->OnStart->OnResume()->onPause()->onDestory->OnCreate()->OnStart->OnResume() 想要避免这种情况:要在manifest文件里面配置onconfigChanged属性 OnCreate:对象创建完毕,但此时不可见 OnStart: Activity在屏幕可见,但是此时没有焦点 OnResume:Activity在屏幕可见,并且获得焦点 onPause:Activity在屏幕

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

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

Android横竖屏切换生命周期

转自xiaoQLuhttp://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题.android的前期系统就是一个半成品,不成熟的系统以及google的快速迭代开发,导致厂家完全跟不上google的步伐,你2.3的bug还没改完,4.0就出来了,4.0的bug还在处理,4.1出来了,最后的结果就是,手机厂家给每部手机一个系统版本,并且不能升级.最后苦逼的就是广大的程序猿们,你不得不考虑从2.1到4.

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

横竖屏切换时候Activity的生命周期变化 对于横竖屏幕的切换,Activity的不同生命周期的变化,自己亲自用真机调试测试了一下,总结如下: Activity类: package com.example.screenorientationchange; import android.support.v7.app.ActionBarActivity; import android.content.res.Configuration; import android.os.Bundle; publ

让Android横竖屏切换时不销毁当前activity

网上查到资料: 对 节点<activity/> 添加属性“ android:configChanges="orientation|keyboardHidden|screenSize" ”,如下所示: 1 <activity 2 android:name=".MainActivity" 3 android:label="@string/app_name" 4 android:configChanges="orientat