首页 > 技术文章 > Android蓝牙扫码连接时,防止Activity重启

uncleguo 2022-02-24 16:14 原文

  集成了一个蓝牙的扫码枪,发现每次连接时,应用的当前Activity会销毁再次创建。调试了下, 没有监听到任何的事件,非常困惑。搜了一阵了解到是Android的一个机制。

  某些设备配置可能会在运行时发生变化(例如屏幕方向、键盘可用性,以及当用户启用多窗口模式时)。发生这种变化时,Android 会重启正在运行的 Activity。

  如果应用在特定配置变更期间无需更新资源,并且因性能限制您需要尽量避免 Activity 重启,则可声明 Activity 自行处理配置变更,从而阻止系统重启 Activity。

  因此在清单文件 对应的Activity中增加属性 android:configChanges

  该属性含义:

  列出 Activity 将自行处理的配置变更。在运行时发生配置变更时,默认情况下会关闭 Activity 并将其重启,但使用该属性声明配置将阻止 Activity 重启。相反,Activity 会保持运行状态,并且系统会调用其 onConfigurationChanged() 方法。 

  修改如下:


AndroidManifest.xml
<activity
....
android:configChanges="keyboard|keyboardHidden"
....

 

  从而忽略键盘配置变化。更多信息见官方https://developer.android.com/guide/topics/resources/runtime-changes

推荐阅读