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

一、问题发生场景

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

二、恢复方法

        重启系统

三、原因分析

        1、mCurMethod(输入法Session)对象为空:当按返回键会执行InputMethodManager类中的dispatchInputEvent派发事件方法,由于mCurMethod(输入法Session)对象为空,导致无法执行Activity.onBackPress方法,导致back键失效。(如图)Back键失效的原因分析及解决(基于Android 4.4.3源码分析)_第1张图片Back键失效的原因分析及解决(基于Android 4.4.3源码分析)_第2张图片

        2、mCurMethod赋值分析:

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

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

Back键失效的原因分析及解决(基于Android 4.4.3源码分析)_第3张图片Back键失效的原因分析及解决(基于Android 4.4.3源码分析)_第4张图片

四、解决方案

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

你可能感兴趣的:(Back键失效的原因分析及解决(基于Android 4.4.3源码分析))