修复因界面切换导致输入法管理错误,引起的返回键无法使用的问题

本文探讨了Android系统中Back键无响应的问题及其可能的原因,包括删除输入法、输入法重启错误及界面切换过快等问题,并提供了一段修复该问题的代码示例。

android系统的back键无响应: 系统每个界面获取焦点时都会获取一个输入法实例,失去焦点时会释放此实例。在系统响应back键的时候,会调用到输入法,因为要执行输入法退出等操作。如果不能正常响应,则会有back无法往下步流程发送的问题。

 可能出现的原因:1  如果删除了输入法,则back键流程无法执行,造成back键无响应的问题。

                              2  如果在界面获取完焦点后,输入法报错重启了,则当前界面获取的实例不再适用,造成back键无响应的问                                      题。

                              3  界面切换过快导致界面在退出时无法正常释放输入法实例,重新获取焦点时,无法正常获取输入法的实                                          例,导致重新启动后流程紊乱。下面为解决此问题的diff。

diff --git a/frameworks/base/services/java/com/android/server/InputMethodManagerService.java b/frameworks/base/services/java/com/android/server/InputMethodManagerService.java
old mode 100644
new mode 100755
index a996dbd..0a62710
--- a/frameworks/base/services/java/com/android/server/InputMethodManagerService.java
+++ b/frameworks/base/services/java/com/android/server/InputMethodManagerService.java
@@ -1896,6 +1896,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                         // be calling through here after that change happens.
                         Slog.w(TAG, "Focus gain on non-focused client " + cs.client
                                 + " (uid=" + cs.uid + " pid=" + cs.pid + ")");
+                         if(mCurClient!=null){
+                            Slog.w(TAG, "Focus gain on non-focused mCurClient " + mCurClient.client
+                                     + " (uid=" + mCurClient.uid + " pid=" + mCurClient.pid + ")");
+                            if((mCurClient.uid!=cs.uid)||(mCurClient.pid!=cs.pid)){
+                                executeOrSendMessage(cs.client, mCaller.obtainMessageIO(
+                                        MSG_SET_ACTIVE, 0, cs));
+                            }
+                         }
                         return null;
                     }
                 } catch (RemoteException e) {

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值