一、问题发生场景
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,视图还没有显示出来,就切回原先的界面导致的)