Android configChanges方向

时间:2018-10-31 05:59:09

标签: android

当用户更改方向时,我需要防止重新启动活动,因此我需要设置:

  

android:configChanges =“ orientation”

但是在文档中,有关于方向的注释,

  

注意:如果您的应用程序针对Android 3.2(API级别13)或   更高,那么您还应该声明“ screenSize”配置,   因为当设备在纵向和纵向之间切换时,它也会改变   横向。

我有点害怕与 screenSize 一起使用,因为我只需要定向即可。

我想知道何时发生screenSize事件?

我将'orientation | screenSize'设置在一起,并通过更改设备的字体大小进行了测试,但是screenSize并未更改,因此活动已重新加载。

何时(在哪种情况下)将调用screenSize事件?如果将screenSize设置为configChanges,会有任何副作用吗?

1 个答案:

答案 0 :(得分:0)

为此,我查看了Android源代码。有趣的位在ActivityRecord方法crossesSizeThresholdgetConfigurationChanges中。当屏幕尺寸发生更改,并且更改可能对应用程序“重要”时,发生screenSize事件。那么“重要”是什么意思:

当应用程序发生屏幕调整大小时,Android会尝试确定是否需要重新启动活动。如果更改的大小很小,则对活动内容进行重新布局就足够了,而对于较大的更改,则需要进行完整的配置更改。

要确定是否必须进行配置更改,Android会收集应用程序的大小敏感资源限定符(例如layout-h400dp)。如果调整大小超过了限定符边界,则会发生配置更改;而如果调整大小没有跨越边界,则会保留活动,并且仅执行重新布局。

话虽如此,我试图重现此行为。我无法得出结论性的测试,因为其他configChanges事件也在调整大小期间发生。

我的初衷仍然存在。很难预测可能发生配置更改的所有可能原因,并且很难阻止活动的重新进行。尤其是随着我们今天拥有的API版本和设备型号的增加。精心设计的应用程序可以将业务逻辑和状态与UI层分离开来,仍然是要走的路。