背景

  • Platform: RK3399
  • OS: Android7.1.2
  • Kernel: v4.4.103

问题

在运行我们自己的APK时,插入某些USB的无线鼠标,APK会“重启”,重新走一次生命周期。

分析与解决

开始觉得很奇怪,为啥有的鼠标可以有的却不行,还以为是牌子问题。。。
后面发现插入有问题的USB无线收发器,会生成2个设备,一个鼠标和一个键盘。没错,这是键鼠套装一体的无线收发器,正是这个键盘导致出现了现在的这个现象,而有些无线鼠标的无线收发器不是键鼠套装,所有只会有1个鼠标设备,所以插上去没有问题。

Activity中,如果不设置android:configChanges属性,当相应属性发生改变时,APK会重新调用执行各个生命周期
所以解决办法就是设置configChanges
在APK工程的AndroidManifest.xml中配置configChanges,具体是在<activity>中添加android:configChanges

android:configChanges="keyboard|keyboardHidden"

但配置完configChanges后发现系统的虚拟键盘弹不出,
解决办法是在设置页打开键盘支持:

  1. 可手动打开:设置->语言和输入法->实体键盘->显示虚拟键盘(打开)
  2. 修改系统默认参数,系统默认打开, 改为true:
    /frameworks/base/packages/SettingsProvider/res/values/defaults.xml:
    <!-- Default for Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD -->
    <bool name="def_show_ime_with_hard_keyboard">false</bool>