【问题标题】: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 文件中的活动来防止这种情况。