我在想,为什么不在每次(几乎每一次)活动中都使用android:configChanges="keyboardHidden|orientation"
次呢?
Cargo :
- 不用担心你的活动被轮换了
- 更快
不是很好:
- 如果布局取决于屏幕大小,则需要更改布局(例如,两列左右的布局)
不好的:
- 没有灵活的方式在不同的方向上有不同的布局
- 使用碎片时不太好
但如果我们不使用不同的布局,为什么不呢?
我在想,为什么不在每次(几乎每一次)活动中都使用android:configChanges="keyboardHidden|orientation"
次呢?
Cargo :
不是很好:
不好的:
但如果我们不使用不同的布局,为什么不呢?
默认情况下,当Android上发生某些关键配置更改(常见的例子是方向更改)时,Android会完全重新启动正在运行的活动,以帮助其适应此类更改.
当您在AndroidManifest中定义android:configChanges="keyboardHidden|orientation"
时,您就是在告诉Android:"请不要在拔出键盘或旋转手机时进行默认重置;我想自己处理这件事.是的,我知道我在做什么."
这是好事吗?我们很快就会看到...
你一开始的优点之一是:
不用担心你的活动被轮换了
在许多情况下,人们错误地认为,当他们有一个由方向改变("旋转")产生的错误时,他们只需输入android:configChanges="keyboardHidden|orientation"
就可以解决它.
然而,android:configChanges="keyboardHidden | orientation"不过是一张绷带.事实上,有很多方式可以触发配置更改.例如,如果用户 Select 了一种新的语言(即语言环境已更改),您的活动将以与方向更改相同的方式重新启动.如果你想看,你可以看a list of all the different types of config changes.
Edit:更重要的是,正如hackbod在 comments 中指出的那样,当你的应用程序在后台,Android决定通过终止它来释放一些内存时,你的活动也会重新启动.当用户返回到您的应用程序时,Android将try 重新启动活动,方法与其他配置更改时的方式相同.如果你处理不好-用户会不高兴的…
换句话说,使用android:configChanges="keyboardHidden|orientation"
并不能解决你的"担忧"正确的方法是对你的活动进行编码,让他们对安卓的重启感到满意.这是一个很好的实践,将帮助你在future 的道路上,所以要习惯它.
正如您所说,这有一个明显的优势.通过自己处理来覆盖循环的默认配置更改将加快速度.然而,这种速度确实伴随着便利的代价.
简单地说,如果你对纵向和横向都使用相同的布局,那么通过覆盖,你的状态就很好.视图不会完全重新加载活动,而是简单地四处移动以填充剩余空间.
However,如果由于某种原因,当设备处于横向时,您使用了不同的布局,那么Android重新加载您的活动是好的,因为它将加载正确的布局.[如果你在这样一个活动上使用覆盖,并且想在运行时做一些神奇的重新布局……好吧,祝你好运——这可不简单]
当然,如果android:configChanges="keyboardHidden|orientation"
适合你,那就使用它.但是,一定要测试发生变化时会发生什么,因为方向改变并不是触发完全活动重启的唯一方式.