Android中有2个InputFilter,一般搜到的都是text.InputFilter,
这里我们讨论的是input相关的view.InputFilter,
Input分发流程中有判断是否设置了InputFilter,设置了的话,input流程会走到InputFilter里,
查看InputFilter的定义,竟然是继承了binder的stub对象,看来是可以作为binder服务对象在进程中进行传送数据。
92 * @hide 93 */ 94public abstract class InputFilter extends IInputFilter.Stub {
看一下IInputFilter的定义,
frameworks/base/core/java/android/view/IInputFilter.aidl
17package android.view; 18 19import android.view.IInputFilterHost; 20import android.view.InputEvent; 21 22/** 23 * Interface for implementing an filter which observes and 24 * potentially transforms the input event stream in the system. 25 * 26 * @hide 27 */ 28oneway interface IInputFilter { 29 void install(IInputFilterHost host); 30 void uninstall(); 31 void filterInputEvent(in InputEvent event, int policyFlags); 32}
可以看出,InputEvent,MotionEvent对象可以序列化后通过binder传送。
InputFilter中定义了handler来进行异步处理,编译接收系统的input事件,避免系统的input流程出现阻塞,我们也可以调用filterInputEvent 方法来主动注入一个事件,
149 final public void filterInputEvent(InputEvent event, int policyFlags) { 150 mH.obtainMessage(MSG_INPUT_EVENT, policyFlags, 0, event).sendToTarget(); 151 }
handler的定义
213 private final class H extends Handler { 214 public H(Looper looper) { 215 super(looper); 216 } 217 218 @Override 219 public void handleMessage(Message msg) { 220 switch (msg.what) { 221 case MSG_INSTALL: 222 mHost = (IInputFilterHost) msg.obj; 223 if (mInboundInputEventConsistencyVerifier != null) { 224 mInboundInputEventConsistencyVerifier.reset(); 225 } 226 if (mOutboundInputEventConsistencyVerifier != null) { 227 mOutboundInputEventConsistencyVerifier.reset(); 228 } 229 onInstalled(); 230 break; 231 232 case MSG_UNINSTALL: 233 try { 234 onUninstalled(); 235 } finally { 236 mHost = null; 237 } 238 break; 239 240 case MSG_INPUT_EVENT: { 241 final InputEvent event = (InputEvent)msg.obj; 242 try { 243 if (mInboundInputEventConsistencyVerifier != null) { 244 mInboundInputEventConsistencyVerifier.onInputEvent(event, 0); 245 } 246 onInputEvent(event, msg.arg1); 247 } finally { 248 event.recycle(); 249 } 250 break; 251 } 252 } 253 } 254 } 255}
参考资料