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

前言:

 今天看到一个题目:简述横竖屏切换时,Activity的生命周期

先在网上找了相关的文章阅读,然后自己测试了一遍,发现与其他人的测试结果不同,因此写下这篇简单的文章希望能和大家探讨一下,如有错误的地方希望大家帮忙指出,共同学习。


第一部分:测试代码

package com.njit.activity_screenorention_lifecycle;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;

public class MainActivity extends Activity {

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

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

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

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

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

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

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

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		System.out.println("onConfigurationChanged()");
	}

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

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

第二部分:不同设置情况下的Activity的生命周期

以下所示的测试结果都是从Activity被创建,再从横屏切换到竖屏,然后再从竖屏切换到横屏,最后退出Activity过程中调用的方法:

(1)未在 AndroidManifest.xml 中设置 Activity 的 android:configChanges:

Android4.0模拟器:

Android4.4.4手机:


从上面的结果我们可以看出:手机屏幕从横屏切换到竖屏,再从竖屏切换到横屏时,Activity 都执行了一次完整的生命周期。

(2)在 AndroidManifest.xml 中设置 Activity 的 android:configChanges="orientation":

Android 4.0模拟器:


Android 4.4.4手机:


对比分析发现:在 AndroidManifest.xml 中设置手机 Activity 的 android:configChanges="orientation" 属性的效果与未设置属性的效果一样,横竖屏切换时 Activity 都执行了一次完整的生命周期。

(3)设置 Activity 的 android:configChanges="orientation|keyboardHidden":

Android4.0 模拟器:


Android 4.4.4模拟器:


对比分析发现:这种情况和前两种情况结果一致,从横屏切换到竖屏,再从竖屏切换到横屏时 Activity 都执行了一次完整的生命周期。

(4)设置 Activity 的 android:configChanges="orientation|keyboardHidden|screenSize":

Android4.0 模拟器:


Android 4.4.4手机:


对比分析发现:无论是从横屏切换到竖屏还是从竖屏切换到横屏都只执行 onConfigurationChanged() 方法。


第三部分:总结

根据测试结果可知只有在AndroidManifest.xml文件中设置Activity的 android:configChanges="orientation|keyboardHidden|screenSize"时,切换横竖屏时才只执行 onConfigurationChanged() 方法;其他三种情况切换横竖屏时,都会执行一次完整的Activity的生命周期。

以上为 Android 4.0 模拟器和 Android 4.4.4 的手机测试的结果,测试可能存在不完整性,有什么错误的地方欢迎大家指出来,共同学习。


=========================================================================================

更新:

自己测试结果和别人测试结果不同的原因:

因为在Android4.0以后支持多分辨率,所以需要在Activity中配置 android:configChanges="orientation|keyboardHidden|screenSize",其中screenSize是为了屏蔽屏幕大小的自适应。如果是低版本的手机,只需要设置android:configChanges="orientation|keyboardHidden"属性,切换横竖屏时也只执行 onConfigurationChanged() 方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值