Android 开发板接入外接USB键盘App重启问题
关于插入部分无线鼠标Android应用重启问题
前言
在Android 9.0的项目中,测试工程师验证问题时插入某些USB的无线鼠标,会导致当前的APK会销毁然后重启一次,重新走一次生命周期。
Activity为啥会重启?
为什么会重启?
我们大概率的知道,一般App重启大致有如下原因:
- APP异常了(微信存在这样的问题,闪退重启)
机器状态改变了(比如改变语言),导致Activity重启了
不过,由于日志中没有异常日志,因此考虑后面一种情况。
下面是在《插入无线鼠标Android应用重启问题》
后面发现插入有问题的USB无线收发器,会生成2个设备,一个鼠标和一个键盘。没错,这是键鼠套装一体的无线收发器,正是这个键盘导致出现了现在的这个现象,而有些无线鼠标的无线收发器不是键鼠套装,所有只会有1个鼠标设备,所以插上去没有问题。
这里更加肯定了我的猜想[机器状态改变了(比如改变语音),导致Activity重启了]。
特意打印了一下Activity的生命周期的日志,发现Activity被销毁,然后重新启动了。
Android文档中有如下说明(前面《AndroidManifest.xml的configChanges配置简介》中也讲解过)
如果我们AndroidManifest.xml中的Activity中的android:configChanges申明了对应的属性,当属性改变时Activity不会重启且调用onConfigurationChanged()
因此解决,这个问题就是我们在AndroidManifest.xml中申明一下插入USB的无线鼠标后会改变的状态值即可。
但,我们不知道到底改变了哪一个值。为了验证,我们可以通过下面的方式做一下试验,然后找出幕后的凶手。
查找凶手
磨刀呼呼向猪羊。
第一步:AndroidManifest.xml的MainActivity的configChanges申明加入可能改变的状态
android:configChanges="orientation|uiMode|keyboard|keyboardHidden|fontScale|touchscreen|navigation|screenLayout|colorMode"
第二步:MainActivity中实现onConfigurationChanged,并添加如下打印。
@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);Log.d(TAG, "onConfigurationChanged keyboard : " + newConfig.keyboard);Log.d(TAG, "onConfigurationChanged densityDpi : " + newConfig.densityDpi);Log.d(TAG, "onConfigurationChanged fontScale : " + newConfig.fontScale);Log.d(TAG, "onConfigurationChanged hardKeyboardHidden : " + newConfig.hardKeyboardHidden);Log.d(TAG, "onConfigurationChanged keyboardHidden : " + newConfig.keyboardHidden);Log.d(TAG, "onConfigurationChanged mcc : " + newConfig.mcc);Log.d(TAG, "onConfigurationChanged mnc : " + newConfig.mnc);Log.d(TAG, "onConfigurationChanged navigation : " + newConfig.navigation);Log.d(TAG, "onConfigurationChanged navigationHidden : " + newConfig.navigationHidden);Log.d(TAG, "onConfigurationChanged orientation : " + newConfig.orientation);Log.d(TAG, "onConfigurationChanged screenHeightDp : " + newConfig.screenHeightDp);Log.d(TAG, "onConfigurationChanged screenLayout : " + newConfig.screenLayout);Log.d(TAG, "onConfigurationChanged smallestScreenWidthDp : " + newConfig.smallestScreenWidthDp);Log.d(TAG, "onConfigurationChanged touchscreen : " + newConfig.touchscreen);Log.d(TAG, "onConfigurationChanged uiMode : " + newConfig.uiMode);Log.d(TAG, "onConfigurationChanged locale : " + newConfig.locale)
第三步:插拔USB无线收发器
下面是插拔的日志打印。
# 插入onConfigurationChanged keyboard : 2onConfigurationChanged densityDpi : 160onConfigurationChanged fontScale : 1.0onConfigurationChanged hardKeyboardHidden : 1onConfigurationChanged keyboardHidden : 1onConfigurationChanged mcc : 460onConfigurationChanged mnc : 7onConfigurationChanged navigation : 2onConfigurationChanged navigationHidden : 1onConfigurationChanged orientation : 2onConfigurationChanged screenHeightDp : 670onConfigurationChanged screenLayout : 268435812onConfigurationChanged smallestScreenWidthDp : 720onConfigurationChanged touchscreen : 3onConfigurationChanged uiMode : 17onConfigurationChanged locale : zh_CN# 拔出onConfigurationChanged keyboard : 1onConfigurationChanged densityDpi : 160onConfigurationChanged fontScale : 1.0onConfigurationChanged hardKeyboardHidden : 2onConfigurationChanged keyboardHidden : 1onConfigurationChanged mcc : 460onConfigurationChanged mnc : 7onConfigurationChanged navigation : 1onConfigurationChanged navigationHidden : 2onConfigurationChanged orientation : 2onConfigurationChanged screenHeightDp : 670onConfigurationChanged screenLayout : 268435812onConfigurationChanged smallestScreenWidthDp : 720onConfigurationChanged touchscreen : 3onConfigurationChanged uiMode : 17onConfigurationChanged locale : zh_CN
日志中出现navigation、navigationHidden、keyboard、hardKeyboardHidden几个的状态改变了。
解决方式
从上面日志中知道navigation、navigationHidden、keyboard、hardKeyboardHidden几个的状态发生了改变,加上我们没有配置这几个状态的监听,所以Activity被重启了一次。
因此,我们在AndroidManifest.xml中的Activity配置为如下:
android:configChanges="keyboard|navigation|keyboardHidden"
参考文章
- 《插入无线鼠标Android应用重启问题》
- 《onConfigurationChanged》
- 《AndroidManifest.xml的configChanges配置简介》
Android 开发板接入外接USB键盘App重启问题相关推荐
- Android开发板
由于公司要做智能自助设备,因此需要在Android开发板上开发,记录一下经验 一.Android开发板应用 Android开发板应用: 商业应用:机顶盒.广告机,自助机,售卖机,多媒体教学,人脸识别, ...
- Android开发板串口(SerialPort)通信
Android开发板串口(SerialPort)通信 Roy88关注 22017.09.07 18:01:22字数 1,618阅读 28,511 前言: 最近在总是看见有人在群里面问一些串口通信相关的 ...
- Android开发板 MTK 4g/5g 安卓开发板定制
厂商:深圳新移科技 公司介绍:专业提供 4G.5G 安卓核心板 / 开发板.物联网方案.整机定制开发生产 一.Android 开发板应用: 商业应用:安防监控,图像识别设备,4G 音视频传输,智能手持 ...
- 【测评】迅为4418/6818开发板安卓Android开发板
拿到开发板暂时按手册测试了以下功能,性能确实不错,没有卡顿现象,更多功能有待测试... Android开发板 Android开发板基本功能介绍 1.开机 开发板接通电源,并按下电源开关,系统即启动,在 ...
- Android开发板开发总结
ADB常见命令 adb connect ip[:port]:连接Android开发板(要求开发板开启ADB服务) adb disconnect ip:断开与Android开发板的连接 adb shel ...
- Android开发板之串口开发
Android开发板之串口开发 简介 首先描述一下我的应用项目,它是一个简单的智能盒子,主要内容:是通过Android开发板上的串口进行数据的读取操作,一块android开发板外接一个Arduino, ...
- Android 如何在插入外接物理键盘时还能显示软键盘
参考地址:http://blog.csdn.net/wq892373445/article/details/51767022 http://blog.csdn.net/qq_32034593/arti ...
- android开发板只有网口和串口如何使用android studio进行调试
android开发板只有网口和串口如何使用android studio进行调试 1.要先准备一条串口线,或者串口转usb的线,用于在pc端与开发板端建立连接. 2.要下载一个在pc端运行的超级终端,我 ...
- 在Android开发板跑一个LED驱动的历程(个人笔记)
[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 在Android开发板跑一个LED驱动的历程(个人笔记) 1. 板子端, 放置驱动程序 1.1 编写一个驱动程序 驱动程序的编写上, ...
最新文章
- 解决掉这些痛点和难点,让知识图谱不再是“噱头”
- python下载网页里面所有的图片-Python批量下载网页图片详细教程
- YOLOv2和YOLOv3效果对比
- 副族元素从上到下原子半径_长知识:化学元素大阅兵
- 个人博客网站的设计与实现_新手建立个人博客网站后如何提高回访率?
- 浅析call和apply的不同
- Ubuntu kylin 14.04 LTS上安装opencv
- 工业以太网交换机选机攻略
- suse linux增加新磁盘分区,Virtualbox中Linux添加新磁盘并创建分区
- 点击率预测的贝叶斯平滑
- Angular Extends
- 转载—android 媒体库数据更新解决办法总结
- HDU 3081Marriage Match II(二分法+并检查集合+网络流量的最大流量)
- pdf合并页面大小不一样
- 尽管凭借主持人的身份成名,张绍刚先生在内心深处却对这一角色认可度很低
- Ecowalker充气足球门,为青少年足球训练保驾护航!
- Vue el-input 使用伪元素插入间隔符
- 字符串模板和dom模板的区别
- Free Code Camp 练习总结(五) ——Introduction to the ES6 Challenges ES6基本用法和基础知识
- php开发使用predis(thinkphp框架,composer,windows环境练习)