我想知道为什么不在 android:configChanges="keyboardHidden|orientation"每个(几乎每个;))活动中使用?
android:configChanges="keyboardHidden|orientation"
商品:
不太好:
坏的:
但是如果我们不使用不同的布局,为什么不呢?
默认情况下,当 Android 上发生某些关键配置更改(常见示例是方向更改)时,Android 会完全重启正在运行的 Activity 以帮助其适应此类更改。
当您android:configChanges="keyboardHidden|orientation"在 AndroidManifest 中定义时,您是在告诉 Android:“请不要在拔出键盘或旋转手机时进行默认重置;我想自己处理。是的,我知道我在做什么”
这是一件好事吗?我们很快就会看到…
您开始的优点之一是:
无需担心您的活动被轮换
在许多情况下,人们错误地认为,当他们遇到由方向变化(“旋转”)产生的错误时,他们可以简单地通过输入android:configChanges="keyboardHidden|orientation".
然而, android:configChanges=”keyboardHidden|orientation” 只不过是一个创可贴。事实上,可以通过多种方式触发配置更改。例如,如果用户选择了一种新的语言(即区域设置已更改),您的活动将以与方向更改相同的方式重新启动。如果您愿意,您可以查看所有不同类型的配置更改的列表。
编辑 :更重要的是,正如[在评论中指出的那样,当您的应用程序在后台并且 Android 决定通过杀死它来释放一些内存时,您的活动也将重新启动。当用户返回您的应用程序时,Android 将尝试重新启动 Activity,就像发生其他一些配置更改时一样。如果你不能处理 - 用户将不高兴......
换句话说,使用android:configChanges="keyboardHidden|orientation"并不能解决您的“担忧”。正确的方法是对您的活动进行编码,以便他们对 Android 向他们抛出的任何重启感到满意。这是一个很好的做法,可以帮助你走上这条路,所以要习惯它。
正如你提到的,有一个明显的优势。通过自己处理来覆盖轮换的默认配置更改将加快速度。然而,这种速度确实以便利为代价。
简而言之,如果您对纵向和横向都使用相同的布局,则通过覆盖您处于良好状态。视图不会完全重新加载活动,而是会简单地移动以填充剩余空间。
但是 ,如果由于某种原因您在设备处于横向时使用了不同的布局,Android 重新加载您的 Activity 的事实很好,因为它将加载正确的布局。[如果您在这样的 Activity 上使用覆盖,并且想在运行时进行一些神奇的重新布局......好吧,祝你好运 - 这远非简单]
无论如何,如果android:configChanges="keyboardHidden|orientation"适合您,请使用它。但是 请 务必测试发生变化时会发生什么,因为方向变化并不是触发完全 Activity 重启的唯一方式。