Android Input系统
薛文旺
Android图形与显示--路漫漫其修远兮,吾将上下而求索
展开
-
Android移动鼠标的流程
【代码】Android移动鼠标的流程。原创 2024-08-15 18:46:56 · 229 阅读 · 0 评论 -
Android原生输入法输入数字单词流程
【代码】Android原生输入法输入数字单词流程。原创 2024-08-02 09:15:15 · 128 阅读 · 0 评论 -
Android输入法IME(四)之 服务端(IMS)启动流程
Android输入法IME(四)之 服务端(IMS)启动流程原创 2024-06-11 19:08:25 · 469 阅读 · 0 评论 -
Android输入法IME(三)之 管理端(IMMS)启动流程
Android输入法IME(三)之 管理端(IMMS)启动流程原创 2024-06-05 17:43:56 · 910 阅读 · 1 评论 -
Android输入法IME(二)之 客户端(IMM)启动流程
Android输入法IME(二)之 客户端启动流程。原创 2024-05-31 20:24:29 · 693 阅读 · 0 评论 -
Android输入法IME(一)之 整体框架
主要指输入法框架的InputMethodService, 这是一个输入法服务, 真正实现输入法界面, 控制字符输入的地方。运行在输入法进程, 例如某狗输入法进程。输入法IME整体框架模块进行学习梳理,内容包含输入法框架三部分IMM、IMMS、IMS的启动流程、点击弹出流程、显示/隐藏流程,以及常见问题和调试技巧。代码路径:frameworks/base/services/core/java/com/android/server/inputmethod/运行在需要使用输入法的进程。1. IME整体框架。原创 2024-05-30 14:29:10 · 370 阅读 · 0 评论 -
Android焦点之FocusWindow切换流程
关键调用是setInputWindows,InputDispatcher::dispatchFocusLocked:在这里打印日志"Focus entering" 或 "Focus leaving"原创 2024-07-16 12:16:09 · 507 阅读 · 0 评论 -
Android焦点之FocusWindow切换
这里要遍历的windows是从SurfaceFlinger发来的最新的输入窗口列表,而token是之前设置的焦点窗口,这个函数的大意是根据最新的输入窗口信息判断之前设置的焦点窗口是否有效。3. 返回NOT_VISIBLE,说明之前设置的焦点窗口还在最新的输入窗口列表里,但是被设置了NOT_VISIBLE,即该Layer已经不可见了,所以不能再作为焦点窗口了。4. 返回OK,找到了一个符合条件的窗口作为焦点窗口,并且将该窗口保存在传参outFocusableWindow中。原创 2024-07-15 16:37:54 · 520 阅读 · 0 评论 -
Android焦点之SurfaceFlinger传递给InputFinger
每次SurfaceFlinger主线程进行commit操作的时候,都会调用一次updateInputFlinger方法去更新一遍需要派发给InputDispatcher的窗口信息原创 2024-07-13 15:49:46 · 671 阅读 · 0 评论 -
Android焦点之SurfaceFlinger的apply
apply方法主要就是收集之前通过transaction属性设置方法设置所有信息都需要收集起来,比如最重要的composerStates,然后调用sf的跨进程方法setTransactionState传递到sf中。原创 2024-07-13 15:46:53 · 520 阅读 · 0 评论 -
Android焦点之InputWindows的更新(二)
再次回到InputMonitor#updateInputWindows(),调用SurfaceControl.Transaction#merge,之后,当WindowAnimator.java的animate()时发起apply();可以是线程"android.anim"或"binder"线程;原创 2024-07-11 10:01:11 · 212 阅读 · 0 评论 -
Android焦点之InputWindows的更新(一)
找到焦点窗口后,回到DisplayContent的updateFocusedWindowLocked方法中继续往下走 执行到此处会进行InputWindows的更新原创 2024-07-11 09:56:05 · 1118 阅读 · 0 评论 -
Android焦点之Focused Window的更新(二)
我们回到mFindFocusedWindow接口对象中,最终从DisplayContent中自顶向下寻找到的第一个满足条件的窗口,将作为新的焦点窗口后,接下来更新Display#mCurrentFocus变量,表示当前焦点窗口。原创 2024-07-10 19:16:43 · 392 阅读 · 0 评论 -
Android焦点之Focused Window的更新(一)
App主线程调ViewRootImpl.java的relayoutWindow();然后调用到Wms的relayoutWindow(),窗口布局流程。焦点窗口的更新,通过WMS#updateFocusedWindowLocked()方法开始原创 2024-07-10 19:12:34 · 761 阅读 · 0 评论 -
Android ViewPostImeInputStage输入事件处理
InputDispatcher向InputChannel使用socket写入输入事件,触发InputEventReceiver调用来接收输入事件。ViewPostImeInputStage处理view控件的事件。原创 2024-07-06 16:42:22 · 279 阅读 · 0 评论 -
Android 输入系统 InputStage
整体流程如上所说,简要归纳如下:输入法之前的处理输入法处理输入法之后处理综合处理。原创 2024-07-03 19:34:29 · 524 阅读 · 0 评论 -
Android焦点窗口设定
我们经常会遇到一种Application does not hava focused window的ANR异常,这种异常一般是没有焦点窗口FocusedWindow导致原创 2024-06-29 21:58:42 · 270 阅读 · 0 评论 -
Android Focused Window的更新
App主线程调ViewRootImpl.java的relayoutWindow();然后调用到Wms的relayoutWindow(),窗口布局流程。焦点窗口的更新,通过WMS#updateFocusedWindowLocked()方法开始原创 2024-06-29 21:44:09 · 958 阅读 · 0 评论 -
Android焦点窗口切换日志
Android焦点窗口切换日志原创 2024-06-29 21:39:55 · 388 阅读 · 0 评论 -
Android InputDispatcher分发输入事件
InputDispatcher —> dispatchEventLocked:dispatchEventLocked 根据 InputTarget 中的 InputChannel 找到对应的Connection。派发循环是指 InputDispatcher 不断地派发队列取出事件,寻找合适的窗口并进行发送的过程,是 InputDispatcher 线程的主要工作。事件发送循环是 InputDispatcher 通过 Connection 对象将事件发送给窗口,并接受其反馈的过程。原创 2024-06-28 15:26:28 · 591 阅读 · 0 评论 -
Android InputChannel连接
InputChannel是InputDispatcher 和应用程序 (InputTarget) 的通讯桥梁,InputDispatcher 通知应用程序有输入事件,通过InputChannel中的socket进行通信。原创 2024-06-28 15:21:59 · 559 阅读 · 0 评论 -
Android Input事件注入
1. Android可以通过adb shell input xxx命令注入输入事件,调用IMS.injectInputEvent,最终走到通过JNI调用InputDispatcher注入事件,没有经过InputReader。2. 通过InputManager提供的接口注入。原创 2024-06-27 17:33:18 · 531 阅读 · 0 评论 -
Android InputReader 输入事件处理流程
Android系统输入事件产生的底层主要是输入子系统,Android 中的输入设备有很多,例如屏幕,鼠标,键盘等都是输入设备,对于应用开发者,接触最多的也就是屏幕了。2. 用户操作输入设备就会产生各种事件,这些事件的原始信息就会被 Linux内核中的输入子系统采集,原始信息由 Kernel space 的驱动层一直传递到设备结点。3. InputReader读取设备节点数据并对输入事件信息进行加工处理,加工处理后的事件会交给 InputDispatcher 来处理。原创 2024-06-27 16:53:50 · 868 阅读 · 0 评论 -
Android系统主动修改鼠标样式
将鼠标移到到Button上,鼠标样式由箭头变成小手,pointerType=1000是箭头,pointerType=1002是鼠标小手。原创 2024-06-26 20:32:54 · 454 阅读 · 0 评论 -
Android APP通过View修改鼠标样式
设置鼠标样式setPointerIcon的调用栈原创 2024-06-26 20:29:50 · 434 阅读 · 0 评论