Android连接和断开蓝牙导致Activity-oncreate重新执行

某天测试提了一个Bug,播放音乐时连接和断开蓝牙会导致App崩溃,而且是必现的,嗯,必现就好办。
调试查找一番后发现蓝牙断开或者连接导致Activity 的onCreate()方法重复执行了,咦,没碰到过啊,老办法有Bug先百度,整个百度就百度到了整个:
Android连接和断开蓝牙导致Activity-oncreate重新执行
https://ask.csdn.net/questions/24512

可怜大兄弟13年的问题都还没有人回答了~
百度不行就google,但是最近最近墙太高了,翻不过去啊~
好在还有神器Stack Overflow还是可以上的,我解决不了的问题好像都是从上面找到了答案~

Android连接和断开蓝牙导致Activity-oncreate重新执行
https://*.com/questions/41420025/android-app-fires-oncreate-whenever-bluetooth-keyboard-connects-disconnects?r=SearchResults

下面有个回答提醒了了我,蓝牙输入设备导致configChanges变化,但我是蓝牙耳机啊,哪来的输入设备???一般我们常见导致onCreate()方法重复执行的有keyboardHidden、orientation、screenSize三兄弟。
然后打开系统设置-蓝牙-已配对蓝牙设备,看到了一个神奇的东西:
Android连接和断开蓝牙导致Activity-oncreate重新执行
waht ???这个耳机哪来的输入设备??难道就这个导致的?
对着google android:configChanges:
Android连接和断开蓝牙导致Activity-oncreate重新执行
https://developer.android.google.cn/guide/topics/manifest/activity-element.html?hl=en

嗯,“keyboard” The keyboard type has changed — for example, the user has plugged in an external keyboard.
其余都不沾边的,试试~…building…
一顿操作猛如虎,正当我得意洋洋觉得问题迎刃而解了,可是现实把我摁在地上狠狠的摩擦,configChanges加了keyboard依旧没卵用。
冷静下,仔细分析,问题应该是出在configChanges这点没错,但不是keyboard那是哪个呢?其余的都没有关系啊~
没办法喽,只能一个一个试试看~,好在总共才10多个,最后试出来手机这个家伙:“navigation” The navigation type (trackball/dpad) has changed. (This should never normally happen.),configChanges加上navigation就好了。
看到这里,蓝牙耳机,输入设备,navigation,你是不是?????,Android连接和断开蓝牙导致Activity-oncreate重新执行

哈哈,奇妙的组合~~(leader说可能是这个蓝牙耳机乱注册了些东西吧,别的蓝牙耳机没有这个问题)

上一篇:键盘输入与swing Java


下一篇:面向对象程序设计第三单元总结