解决华为手机隐藏虚拟按键Activity被重启的问题

引言

最近技术群里面的妹纸说:在华为手机上开发应用的时候,隐藏底部的虚拟按键Activity会被重启的问题,并且找不到问题所在,于是查查资料,发现问题解决起来蛮简单的。

问题描述

一开始觉得应该是代码问题,然后自己撸了一个工程,并在华为的测试机上测了一吧,发现在二级Activity隐藏掉虚拟按键盘的时候,然后按页面上的返回键,发现第一级的Activity的生命周期这样走了

startActivity(Intent)的声明周期
onCreate() ---> onStart()  --->onResume();
startActivityForResult(Intent,requestCode);的声明周期
onCreate() ---> onStart()  --->onResume() ---> onActivityResult(requestCode, resultCode, Intent);

这这,不符合预期的结果啊,Activity被重启了….这明显的影响性能啊,页面又重新绘制了一次。如果再有一点耗时操作,那么就被用户感知了,用户:浪费我时间和流量啊….

思路

仔细检查了代码,发现不是代码的问题,那么是什么问题了。我们想想,把虚拟按键隐藏后,最直观的东西:Activity的大小改变了吧??
为了确定这个猜测,我把Activity里面的onConfigurationChanged(Configuration newConfig) 重写了。然后Debug,接着复现一下,然后发现onConfigurationChanged确实被调用了…..
然后我们想想当横竖屏切换后,如果不在配置文件里面设置 android:configChanges=”” 值,是不是Activity也会重启啊。于是我们就查相关资料,我想configChanges里面应该也有个值是虚拟按键的。

解决方式

首先想到虚拟按键,在华为Android手机里面应该属于导航栏,那么应该是这样的

android:configChanges="navigation"

然后问题解决了。

拓展
英文说明翻译
mccThe IMSI mobile country code (MCC) has changed — a SIM has been detected and updated the MCC.IMSI(国际移动用户识别码)发生改变,检测到SIM卡,或者更新MCC
mncThe IMSI mobile network code (MNC) has changed — a SIM has been detected and updated the MNC.IMSI网络发生改变,检测到SIM卡,或者更新MCC其中mcc和mnc理论上不可能发生变化
localeThe locale has changed — the user has selected a new language that text should be displayed in.语言发生改变,用户选择了一个新的语言,文字应该重新显示
touchscreenThe touchscreen has changed. (This should never normally happen.)触摸屏发生改变,这通常是不应该发生的
keyboardThe keyboard type has changed — for example, the user has plugged in an external keyboard.键盘类型发生改变,例如,用户使用了外部键盘
keyboardHiddenThe keyboard accessibility has changed — for example, the user has revealed the hardware keyboard键盘发生改变,例如,用户使用了硬件键盘
navigationThe navigation type (trackball/dpad) has changed. (This should never normally happen.)导航发生改变,(这通常不应该发生) 举例:连接蓝牙键盘,连接后确实导致了navigation的类型发生变化。因为连接蓝牙键盘后,我可以使用方向键来navigate了
screenLayoutThe screen layout has changed — this might be caused by a different display being activated.屏幕的布局发生改变,这可能导致激活不同的显示
fontScaleThe font scaling factor has changed — the user has selected a new global font size.全局字体大小缩放发生改变
orientationThe screen orientation has changed — that is, the user has rotated the device.设备旋转,横向显示和竖向显示模式切换。
screenSizescreenSize屏幕大小改变了
smallestScreenSizesmallestScreenSize屏幕的物理大小改变了,如:连接到一个外部的屏幕上
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值