Android 10.0 &&Android 11插入usb设备之后导致应用重启

Android 10.0 &&Android 11插入usb设备之后导致应用重启


前言

在进行Frameworks开发过程中遇到需要客户app ,发现在插入usb无线鼠标时,会导致应用秒退退出重进的问题。最终经过查阅博客发现是,Android程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换、键盘的可用性等。这些事件一旦发生,当前活动的Activity会重新启动。


一、configChanges作用

Android程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换、键盘的可用性等。这些事件一旦发生,当前活动的Activity会重新启动,其中的过程是:在销毁之前会先调用onSaveInstanceState()方法去保存你应用中的一些数据,然后调用onDestroy()方法,最后调用onCreate()、onStart()、onResume()等方法启动一个新的Activity。

如果想让某些配置在发生改变的时候不重启Activity,需要为Activity添加android:configChanges属性,该属性可以设置多个值,用"|"隔开,例如:“locale|navigation|orientation。设置了android:configChanges属性后,当指定的属性发生变化时,不会去重新启动Activity,而是通知程序去调用Activity的onConfigurationChanged()方法。例如:在进行横竖屏的切换时,会重新启动Activity,而定义了android:configChanges=“orientation|keyboardHidden”,就不会重新启动Activity了,而是去调用 onConfigurationChanged()方法。

简言之,在Activity中添加了android:configChanges属性,目的是当android:configChanges所设置的属性值对应的配置属性发生改变时,通知程序调用 onConfigurationChanged()函数,而不会重启Activity。

二、android:configChanges属性可以指定的值

“mcc” :国际移动用户识别码所属国家代号改变了----- sim被侦测到了,去更新mcc,mcc是移动用户所属国家代号
“mnc”: 国际移动用户识别码的移动网号码改变了------ sim被侦测到了,去更新mnc,MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
“locale”: 地址改变了-----用户选择了一个新的语言会显示出来
“touchscreen”: 触摸屏是改变了------通常是不会发生的
“keyboard” :键盘发生了改变----例如用户用了外部的键盘
“keyboardHidden”: 键盘的可用性发生了改变
“navigation”: 导航发生了变化-----通常也不会发生
“screenLayout”: 屏幕的显示发生了变化------不同的显示被激活
“fontScale”: 字体比例发生了变化----选择了不同的全局字体
“uiMode”: 用户的模式发生了变化
“orientation”: 屏幕方向改变了
“screenSize”: 屏幕大小改变了
“smallestScreenSize”: 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

三丶案例

在Activity运行过程中拔插usb设备是会发生重启Activity的现象,原因:usb设备被识别成实体键盘,导致Configuration改变,最终系统重启了activity

解决问题
如图所示,在androidmanifest.xml文件定义指定activity的地方新增 android:configChanges=“keyboard|keyboardHidden”
字段
在这里插入图片描述
在activity的java文件内重写onConfigurationChanged方法
在这里插入图片描述
最终效果如下,在usb设备被识别成实体键盘,导致Configuration改变时,将会直接走onConfigurationChanged方法内的内容,而不是直接重启activity
在这里插入图片描述

总结

通过在androidmanifest.xml文件定义指定activity的地方新增 android:configChanges="keyboard|keyboardHidden"和在activity的java文件内重写onConfigurationChanged方法,最终解决问题

每日赠言

且听,且忘,且随风,且行,且看,且从容

参考链接

https://blog.csdn.net/weixin_42600398/article/details/122525304

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值