一、问题发生场景

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

二、恢复方法

        重启系统

三、原因分析

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

        2、mCurMethod赋值分析:

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

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

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

四、解决方案

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

相关文章:

  • 2020-11-13
  • 2020-04-21
  • 2021-10-30
  • 2022-12-23
  • 2022-12-23
  • 2021-07-28
  • 2022-01-20
  • 2022-12-23
猜你喜欢
  • 2023-02-13
  • 2022-12-23
  • 2021-10-20
  • 2021-08-10
  • 2021-05-08
  • 2022-12-23
相关资源
相似解决方案