Android输入法的显示逻辑

所有记录的一切,都是为了备忘,并无他意
一,几个重点关注的类:
InputMethodManagerService,负责管理系统的所有输入法,包括输入法service(InputMethodService简称IMS)加载及切换。
InputMethodManager,控件获取焦点之后,通过InputMethodManager向 InputMethodManagerService 发出请求绑定自己到当前输入法上
InputMethodService,输入法apk的service,与IMMS进行交互,用来显示输入法的dialog及通过IInputContext绑定到控件上
IInputMethodWrapper,IMMS和输入法之间的交互的aidl接口,它会把所有的调用转到主线程去执行
IInputContext,控件与输入法之间的通讯aidl接口,例如当前输入法输入的文本回调到控件显示
InputConnectionWrapper,他是InputConnection的代理,代理IInputContext,同时也是输入法控件和编辑控件之间的纽带
IInputMethodClient,代表客户端的aidl接口,他会被传输到WindowManagerService里面进行通讯
IInputConnectionWrapper,用户端的IInputContext的实现,最终会被传入到输入法中,进行交互,就是上面提到的IInputContext;
二,输入法显示流程
1,窗口添加的时候,都会绑定一个ViewRootImpl,在ViewRootImpl初始化的时候,会通过WindowManagerGlobal.getWindowSession获取一个WindowSession(WMS在窗口端的远程接口),里面会创建一个InputMethodManager的单例对象,然后里面创建IInputMethodClient和IInputConnectionWrapper对象,并传进来了一个IInputMethodManager的(IMMS的binder对象)
2,当窗口在添加和移除过程中,会伴随着焦点的切换,盗图一张,其中清楚的显示了窗口焦点变化的流程
Android输入法的显示逻辑_第1张图片
Android输入法的显示逻辑_第2张图片
Android输入法的显示逻辑_第3张图片
3,IMMS绑定view输入法事件的流程

Android输入法的显示逻辑_第4张图片
4,输入法的显示逻辑
在view绑定到了输入法之后,ViewRootImpl会紧接着调用显示输入法的逻辑
Android输入法的显示逻辑_第5张图片
三,输入法的切换

1,输入法应用的配置(下面是sogou的),Service需要继承InputMethodService。

            

                

                
            

            
        
 2,应用安装的时候,应该会扫描安装的应用是否有Service配置了android.view.InputMethod的action,如果存在,会更新settings中的secure中的信息enabled_input_methods字段,在用户进行输入法选择的时候,提供给用户选择
 3,应用选择完成输入法,由IMMS更新selected_input_method_subtype字段信息
 4,在View绑定输入法的时候,选择已经选中的输入法的Service,去绑定,然后交互。

https://blog.csdn.net/jieqiong1/article/details/71262987

你可能感兴趣的:(Android源码解析)