美文网首页Android开发经验谈Android基础知识Android开发
【Android】红米5Note Android9.0版本横竖屏

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

作者: 秀叶寒冬 | 来源:发表于2019-07-06 23:31 被阅读2次

    本文主要是验证红米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之前被调用。

    相关文章

      网友评论

        本文标题:【Android】红米5Note Android9.0版本横竖屏

        本文链接:https://www.haomeiwen.com/subject/plhvhctx.html