Android中横竖屏相关事宜

</pre> 最近在做公司项目时,发现横竖屏切换和我原来的认知不太一样,原来我是知道同一个Activity横竖屏切换时,会导致生命周期重启。那么今天就趁此机会将android中横竖屏相关的知识总结一下。<p></p><p></p><p><strong><span style="white-space:pre"></span>首先,我们看同一个activity横竖屏,会执行那么生命周期中的方法:</strong></p><p><span style="white-space:pre"></span>代码如下:</p><p><span style="white-space:pre"></span></p><pre name="code" class="java">package com.example.demo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
	
	private static final String tag = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Log.d(tag, "onCreate");
	}
	
	@Override
	protected void onStart() {
		Log.d(tag, "onStart");
		super.onStart();
	}
	
	@Override
	protected void onResume() {
		Log.d(tag, "onResume");
		super.onResume();
	}
	
	@Override
	protected void onPause() {
		Log.d(tag, "onPause");
		super.onPause();
	}
	
	@Override
	protected void onStop() {
		Log.d(tag, "onStop");
		super.onStop();
	}
	@Override
	protected void onDestroy() {
		Log.d(tag, "onDestroy");
		super.onDestroy();
	}
	
}


1. 先看竖屏时,启动以后会执行那些生命周期:

01-23 22:34:30.659: D/MainActivity(12738): onCreate
01-23 22:34:30.659: D/MainActivity(12738): onStart
01-23 22:34:30.659: D/MainActivity(12738): onResume

2. 我们将手机横屏以后,看看会执行那些周期回调方法:

01-23 22:39:43.809: D/MainActivity(12738): onPause
01-23 22:39:43.809: D/MainActivity(12738): onStop
01-23 22:39:43.809: D/MainActivity(12738): onDestroy
01-23 22:39:43.869: D/MainActivity(12738): onCreate
01-23 22:39:43.869: D/MainActivity(12738): onStart
01-23 22:39:43.869: D/MainActivity(12738): onResume
可以明显看出,横屏以后,又将执行oncreate/onstart/onresume这些方法,也就是生命周期重启了。如果不太了解这个知识点的话,再写代码时很容易掉坑里边。接下来我们就要想想如何防止生命周期重启。

 <activity 
            android:name="com.example.demo.MainActivity"
             android:configChanges="orientation|keyboard|screenSize"
            >
            
            <intent-filter >
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            
        </activity>

需要配置android:configChanges="orientation|keyboard|screenSize"的信息。配置完成以后,横竖屏以后就不会再重启了。这是其中的一个方法。另外的方法,就算重启了,我们可以保存一些数据。重启以后又重新拿到这些数据,就算重启了,也不会有什么影响。

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		// 当activity回收、横竖屏切换时,用于保存数据。
		outState.putString("name", "boss");
		super.onSaveInstanceState(outState);
	}

在activity中重写该方法,用于保存数据。然后在oncreate中获取数据。

protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Log.d(tag, "onCreate");
		
		if (savedInstanceState != null){
			String name = savedInstanceState.getString("name");
			if (name == null){
				Log.d(tag, "null");
			}else{
				Log.d(tag, name);
			}
		}
		
	}
以上就总结了同一个activity时,如何保存数据的问题。


接下来,我们看看两个不同的activity时,生命周期也会重启的。我们来看看测试结果。

另一个activity配置成横屏。结果发现竖屏的activity启动横屏的activity以后,自己的生命周期又重启。如何避免重启,或者如何保存数据,上面已经介绍。记录了这么多也算留个记号吧。

public void click(View view){
		Intent intent = new Intent(this, Main1Activity.class);
		startActivity(intent);
	}
01-23 23:17:34.239: D/MainActivity(26184): onPause
01-23 23:17:34.239: D/MainActivity(26184): onStop
01-23 23:17:34.239: D/MainActivity(26184): onDestroy
01-23 23:17:34.299: D/MainActivity(26184): onCreate
01-23 23:17:34.299: D/MainActivity(26184): onStart
01-23 23:17:34.299: D/MainActivity(26184): onResume






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值