【Android】红米5Note Android9.0版本横竖屏切换

本文主要是验证红米5Note Android9.0版本横竖屏切换问题

1 背景

  • 第一个问题

网上查询资料说Andorid 3.2以前的SDK可以使用如下配置防止横竖屏切换重新创建Activity

android:configChanges="orientation|keyboardHidden"

Adnroid 3.2以后的SDK必须添加一个screenSize属性才能防止横竖屏切换重新创建Activity

android:configChanges="orientation|keyboardHidden|screenSize"
  • 第二个问题

网上说onSaveInstanceState在onStop之前调用

2 示例验证

  • 使用机型:红米5Note
  • Android版本:9

2.1 示例代码

  • MainActivity
package com.example.linechartdemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
    @Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG", "onStart");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("TAG", "onRestart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("TAG", "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("TAG", "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("TAG", "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("TAG", "onDestroy");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("TAG", "onCreate");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d("TAG", "onSaveInstanceState");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d("TAG", "onRestoreInstanceState");
    }

}

  • AndroidManifest
		<activity android:name=".MainActivity"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

2.2 不使用configChanges

  • 竖屏切换横屏
    图2.1 不使用configchanges竖屏切换横屏
  • 横屏切换竖屏
    图2.2 不使用configchanges横屏切换成竖屏由上图可以看出,不使用configChanges,则不管是竖屏切换横屏,还是横屏切换竖屏,都会销毁当前Activity重新创建Activity。由图中可以看出,onSaveInstanceState是在onStop后被调用,onRestoreInstanceState是在onStart后被调用。

2.3 使用configChanges=“orientation|keyboardHidden”

		<activity android:name=".MainActivity"
           android:configChanges="orientation|keyboardHidden" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  • 竖屏切换横屏
    在这里插入图片描述
  • 横屏切换竖屏
    在这里插入图片描述
    由上图所示,只是配置configChanges="orientation|keyboardHidden"时,横竖屏切换时都会重新销毁当前Activity并重新创建Activity,onSaveInstanceState在onStop之后被调用,onRestoreInstanceState在onStart之后被调用。

注:其实还做过只使用configChanges="orientation"和configChanges="keyboardHidden"以及configChanges="keyboardHidden|orientation"的情况,最后打印出来的截图都与上图一致。

2.4 使用configChanges=“orientation|keyboardHidden|screenSize”

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

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

横竖屏切换,最后没有任何信息打印出来,所以,当前Activity不会被销毁,而是横竖屏切换时会重用当前的Activity。将上述的configChanges改成configChanges="orientation|screenSize"后进行横竖屏切换,也没有任何信息打印。

本文验证的问题:

  1. android9.0 版本可通过使用configChanges="orientation|screenSize"或者configChanges="orientation|keyboardHidden|screenSize"来防止横竖屏切换时销毁并重新创建Activity
  2. onSaveInstanceState()是在onStop()之后被调用,onRestoreInstanceState()是在onStart之后onResume之前被调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值