【问题标题】:Activity reloads when orientation changes in Android当 Android 中的方向改变时,Activity 会重新加载
【发布时间】:2013-01-18 22:20:36
【问题描述】:

当我的主要活动在初始屏幕之后开始时,它会解析 4 个大 XML 文件。这需要几秒钟,我可以在启动时显示初始屏幕时隐藏它。

但是当屏幕方向发生变化或当我在子活动后返回主活动时,它会再次解析,因此我的应用程序“挂起”了几秒钟,并且在那段时间没有响应或任何事情。

我知道这是 Android 中的正常行为,但有没有办法避免这种情况?

我阅读了一些关于 savedinstancestate 的内容,但我似乎无法理解文档..

【问题讨论】:

    标签: java android multithreading


    【解决方案1】:

    如果您的目标是 API 级别 12 或更低,请将此代码添加到每个活动节点的 android 清单文件中。

    android:configChanges="orientation|keyboardHidden"
    

    对于 13 级及更高级别,您还必须包括“屏幕尺寸”,即:

        android:configChanges="orientation|keyboardHidden|screenSize"
    

    现在将此代码粘贴到每个活动的 java 类中。

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    
        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
        }
        // Checks whether a hardware keyboard is available
        if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
            Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
        } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
            Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过将 android:configChanges="orientation" 添加到 AndroidManifest 文件中的活动来防止这种情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 2011-07-30
        • 1970-01-01
        相关资源
        最近更新 更多