Back键失效的原因分析及解决(基于Android 4.4.3源码分析)

一、问题发生场景

        Android车载系统中,通过方控按键使两个Activity之间快速切换,会有极高的概率出现按返回键无任何作用的现象。

二、恢复方法

        重启系统

三、原因分析

        1、mCurMethod(输入法Session)对象为空:当按返回键会执行InputMethodManager类中的dispatchInputEvent派发事件方法,由于mCurMethod(输入法Session)对象为空,导致无法执行Activity.onBackPress方法,导致back键失效。(如图)

        2、mCurMethod赋值分析:

            a、应用进程创建时绑定InputMethodManagerService时会给mCurMethod赋值。

            b、两个Activity之间的快速切换,在界面还未完全显示出来又切回原来的Activity界面时,会导致mCurMethod对象无法赋值(为NULL),从而导致back流程无法执行到前台的Activity界面,导致back键失效,具体看如下流程图:


四、解决方案

    在mService.WindowGainedFocus语句后加个对返回值判断,如果返回值为null,则重置mHasBeenInactive变量为treu,使得下次可以正常执行“输入法窗口焦点变化流程”(根本原因在于界面切换时,视图的visible属性还没有置为true,视图还没有显示出来,就切回原先的界面导致的)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值