当用户更改方向时,我需要防止重新启动活动,因此我需要设置:
android:configChanges =“ orientation”
但是在文档中,有关于方向的注释,
注意:如果您的应用程序针对Android 3.2(API级别13)或 更高,那么您还应该声明“ screenSize”配置, 因为当设备在纵向和纵向之间切换时,它也会改变 横向。
我有点害怕与 screenSize 一起使用,因为我只需要定向即可。
我想知道何时发生screenSize事件?
我将'orientation | screenSize'设置在一起,并通过更改设备的字体大小进行了测试,但是screenSize并未更改,因此活动已重新加载。
何时(在哪种情况下)将调用screenSize事件?如果将screenSize设置为configChanges,会有任何副作用吗?
答案 0 :(得分:0)
为此,我查看了Android源代码。有趣的位在ActivityRecord方法crossesSizeThreshold
和getConfigurationChanges
中。当屏幕尺寸发生更改,并且更改可能对应用程序“重要”时,发生screenSize
事件。那么“重要”是什么意思:
当应用程序发生屏幕调整大小时,Android会尝试确定是否需要重新启动活动。如果更改的大小很小,则对活动内容进行重新布局就足够了,而对于较大的更改,则需要进行完整的配置更改。
要确定是否必须进行配置更改,Android会收集应用程序的大小敏感资源限定符(例如layout-h400dp
)。如果调整大小超过了限定符边界,则会发生配置更改;而如果调整大小没有跨越边界,则会保留活动,并且仅执行重新布局。
话虽如此,我试图重现此行为。我无法得出结论性的测试,因为其他configChanges
事件也在调整大小期间发生。
我的初衷仍然存在。很难预测可能发生配置更改的所有可能原因,并且很难阻止活动的重新进行。尤其是随着我们今天拥有的API版本和设备型号的增加。精心设计的应用程序可以将业务逻辑和状态与UI层分离开来,仍然是要走的路。