android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden|navigation|screenSize|uiMode|touchscreen|fontScale|smallestScreenSize|screenLayout"
1. orientation
- 含义:表示屏幕方向发生改变。当用户旋转设备,导致屏幕从横屏变为竖屏或者从竖屏变为横屏时,若 Activity 的
android:configChanges
属性包含 orientation
,则 Activity 不会重新创建,而是调用 onConfigurationChanged
方法。 - 示例场景:在视频播放类应用中,用户旋转屏幕时希望视频播放不中断,可使用此配置。
2. keyboardHidden
- 含义:代表键盘的可访问性发生变化。当用户手动显示或隐藏软键盘时,系统会认为这是一次配置更改。如果 Activity 配置了该值,就不会重新创建 Activity。
- 示例场景:在输入表单较多的应用中,避免软键盘显示和隐藏时 Activity 重新创建导致输入内容丢失。
3. navigation
- 含义:意味着导航类型(如轨迹球、方向键等)发生变化。不过在现代 Android 设备中,这种变化相对较少,因为大多数设备采用触摸屏操作。
- 示例场景:在一些支持外接游戏手柄或特殊输入设备的应用中可能会用到。
4. screenSize
- 含义:表示屏幕尺寸发生变化。从 Android 3.2(API 级别 13)开始,屏幕旋转时屏幕尺寸也会改变,因此通常会将
orientation
和 screenSize
一起配置。 - 示例场景:在不同屏幕尺寸的平板和手机上运行的应用,需要处理屏幕尺寸变化时使用。
5. uiMode
- 含义:表示 UI 模式发生变化,例如设备进入车载模式、夜间模式、桌面模式等。配置该值后,Activity 不会因 UI 模式改变而重新创建。
- 示例场景:在支持夜间模式的应用中,切换夜间模式时避免 Activity 重新创建。
6. touchscreen
- 含义:表示触摸屏类型发生变化。不过这种情况在实际设备使用中非常罕见,因为触摸屏类型通常在设备出厂时就已确定。
- 示例场景:在一些特殊的可更换触摸屏的设备上可能会用到。
7. fontScale
- 含义:表示系统字体缩放比例发生变化。当用户在系统设置中调整字体大小时,Activity 若配置了该值,就不会重新创建。
- 示例场景:在需要适配不同字体大小的应用中使用。
8. smallestScreenSize
- 含义:表示设备的最小屏幕尺寸发生变化。这通常与设备的物理特性有关,在实际开发中较少遇到这种变化。
- 示例场景:在一些需要根据设备最小屏幕尺寸进行布局调整的应用中可能会用到。
9. screenLayout
- 含义:表示屏幕布局发生变化,例如屏幕方向改变、多窗口模式切换等都可能导致屏幕布局变化。配置该值后,Activity 不会因屏幕布局改变而重新创建。
- 示例场景:在支持多窗口模式的应用中,切换窗口大小时避免 Activity 重新创建。