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) {