解决Android终端设备,外接键鼠屏幕闪烁问题
问题
前端时间开发一款Android终端设备的Launcher,在遇到外接键鼠的时候会发现屏幕会闪一下,接入有线鼠标时屏幕不会闪烁,接入键鼠套装或有线键盘时屏幕就会闪烁一下,一开始我以为是键鼠套装中含有网卡模块,插入时会触发驱动,导致Android系统会加载一下,结果不是样的,一顿GPT也没有找到合适结果。
原因
系统检测到键盘类型发生了改变,会关闭当前Activity并重新执行onCreate启动Activity,导致屏幕会闪烁一下。
解决方法
在Manifest文件中activity标签里增加configChanges属性即可:
android:configChanges="keyboard|keyboardHidden"
属性值还可以增加以下内容:
fontScale
: 字体大小改变。keyboard
: 输入设备类型的变化(例如,从没有键盘到有键盘)。keyboardHidden
: 输入设备可见性的变化(例如,键盘弹出或隐藏)。locale
: 区域设置的变化(例如,语言或地区设置更改)。orientation
: 屏幕方向的变化(从横屏到竖屏或反之)。screenLayout
: 屏幕布局大小和UI模式的组合变化。uiMode
: UI模式的变化(如汽车模式或桌面模式)。screenSize
: 屏幕尺寸的变化。navigation
: 导航设备的变化(如从无导航栏到有导航栏)。
总结
当配置发生变化时,如果你声明了 android:configChanges 属性并且正确地处理了这些变化,那么你的Activity将会收到 onConfigurationChanged() 方法的回调,而不是默认的生命周期方法(如 onPause(), onDestroy(), onCreate())。所以应该在这个方法里做适当的处理来适应新的配置。
使用 android:configChanges 需要谨慎。虽然它可以防止不必要的Activity重启,但如果处理不当,可能会导致内存泄漏或其他问题。因此,必要时得在 onConfigurationChanged() 中正确处理所有声明的配置变化。