InputMethod剖析

1,inputMethodSession,view和输入法建立session会话通道,
2,输入法是如何与View进行通信的?
每一个App进程在执行wm.addView()的时候,在其内部会调用ViewrootImpl,并对其进行初始化,ViewrootImpl的构造函数中,会初始化WindowSession,并同时初始化一个IMM单例,IMM类中有一个成员变量mServedInputConnectionWrapper,该变量会被IMMS传递给IMS,当用户输入文字时,输入法便使用该变量,并调用其commitText()方法,通过binder进程间通信,调用IInputConnectionWrapper对应的commitText()方法,将文字传递给对应的View。

3,WMS
updateFocusedWindowLocked 运行在其他线程,使用mH(Handler)发送消息到主线程,处理UI相关的操作,ViewRootImpl的windowFocusChanged方法,运行在其他线程(Binder线程),通过ViewRootImpl的mHandler 和其主线程进行交互

你可能感兴趣的:(Android)