【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之前被调用。
发布了107 篇原创文章 · 获赞 142 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/u013293125/article/details/94448643
今日推荐