将uiMode添加到android:configChanges实际上是做什么?

21

我刚刚修复了我们应用程序中的一个bug。问题在于将设备插入或拔出导致应用程序重新启动。通过查阅大量论坛帖子,我找到了解决方法,就是在AndroidManifest.xml文件中的android:configChanges属性后追加uiMode

    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|uiMode" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustPan">
        <intent-filter android:label="@string/launcher_name">
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我希望通过提交这个更改来确保我不会破坏其他重要的功能。据我所知,这可以防止我们的应用在对接或脱离时重新启动。但是这就是所有吗?我找不到任何易于理解的文档。


7
好的,找到了……用户界面模式已更改 - 这可能是由于用户将设备放入桌面/车载底座或夜间模式改变引起的。 - Xoundboy
1
这个问题本身就是解决Docking模式所面临的问题的答案!https://commonsware.com/blog/2019/06/19/android-q-uimode-configuration-changes.html - usr30911
1个回答

16

将某些内容添加到 android:configChanges 中告诉 Android,你将在 Activity 类的 onConfigurationChanged 方法中自行处理特定事件(或忽略它们)。如果你在那里指定了一些内容,在出现触发事件时(如插入/拔出设备的情况下),Android 将不会自动执行任何操作,包括 Activity 的重新创建。

通常情况下,只要你不更改布局,例如在此类事件发生时,就不会破坏任何东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接