从一个问题来认识android:configChanges属性

本文详细阐述了在不同手机型号上使用系统相机时遇到的异常现象,特别是三星note3手机上点击保存时执行错误方法的情况。通过分析Android配置属性android:configChanges的作用及其可能引发的设备状态变化,最终找到了问题根源在于额外的一行配置导致的活动捕捉设备状态变化。文章还提供了问题解决策略,帮助开发者避免类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天遇见一个挺奇葩的问题,怎么讲呢,其实就是在A界面上调用系统相机,然后把照片显示到界面上,原本是一个很简单的问题,可是却出现一个挺奇葩的现象,在绝大部分手机上,我试过MX4  ,荣耀6 ,小米三,小米四,oppo R7,还有摩托罗拉的一款旧手机,都挺正常的,可是当我用三星note3的时候,却发现了一个很奇怪的现象,就是不管我怎么调试,点击保存的时候,都会执行A 界面 的onCreat方法,然后没有带回来数据,直接把A界面消耗,跳转到A之前的那个界面,郁闷了好久都没弄出来到底是怎么回事,不过还好的是,在我们项目中,另外一个地方也调用了系统相机,可是那个地方可以,同样的代码,都在note3 上运行,为啥那边就可以,这边就不行呢,而且我使用的是CV大发啊,直接从那个地方copy过来也不行,不是在代码中,那就是在配置文件中,然后就发现了,在那个界面上,比A界面多了一行配置,

android:configChanges="orientation|screenSize" 

就是这行配置导致的现象不一样,android:configChanges   这个属性是干嘛的  简单 的来说,就是 通过设置这个属性可以使Activity捕捉设备状态变化,可以识别的值有一下几个,


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

 


值是copy   http://blog.youkuaiyun.com/jkkjklmn/article/details/7349517  这篇blog.


 为啥会出现这个原因呢,其实我在测试的时候就发现,在点击拍照后,保存的时候,界面会旋转一下,可是我想不通的是,为啥拍照界面旋转,会导致A界面也会旋转呢,在其他手机上不出现,就只有note 3 上出现,这个现在还没搞清楚,等搞清楚了在记录下来。但是现在问题是解决了。晚上可以睡个好觉了。。。






android:configChanges 属性的值可以是一个或多个以下属性的组合,每个属性都代表不同的配置更改类型。下面是 android:configChanges 的所有属性及其解释: - `mcc`:移动国家代码更改。当用户更改了手机卡并且新卡的移动国家代码与原卡不同时,这个属性会被触发。 - `mnc`:移动网络代码更改。当用户更改了手机卡并且新卡的移动网络代码与原卡不同时,这个属性会被触发。 - `locale`:语言更改。当用户更改了系统语言设置时,这个属性会被触发。 - `touchscreen`:触摸屏类型更改。当设备的触摸屏类型发生更改时,这个属性会被触发。 - `keyboard`:键盘类型更改。当设备的键盘类型发生更改时,这个属性会被触发。 - `keyboardHidden`:键盘可用性更改。当设备的键盘的可用性发生更改时,这个属性会被触发。 - `navigation`:导航方式更改。当设备的导航方式(如物理键盘、虚拟键盘、轨迹球等)发生更改时,这个属性会被触发。 - `orientation`:屏幕方向更改。当屏幕方向更改时,这个属性会被触发。 - `screenLayout`:屏幕布局更改。当屏幕布局发生更改时,这个属性会被触发。 - `fontScale`:字体缩放比例更改。当用户更改了系统字体缩放比例时,这个属性会被触发。 - `uiMode`:UI 模式更改。当设备的 UI 模式(如夜间模式等)发生更改时,这个属性会被触发。 - `density`:屏幕密度更改。当屏幕的物理密度发生更改时,这个属性会被触发。 - `screenSize`:屏幕尺寸更改。当屏幕的物理尺寸发生更改时,这个属性会被触发。 注意:尽管使用 android:configChanges 能够提高应用程序的性能和用户体验,但是过度使用可能会导致应用程序出现某些异常行为,因此需要谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值