解决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() 中正确处理所有声明的配置变化。

 

posted @ 2024-10-22 13:51  渣娃  阅读(30)  评论(0编辑  收藏  举报