大厂必问输入系统:ACTION_CANCEL、触摸卡顿、窗口拦截底层根源一次性讲透
前言绝大多数应用开发者处理滑动冲突、点击失效、页面跟手卡顿等 UI 问题时,只会停留在onInterceptTouchEvent、requestDisallowInterceptTouchEvent应用层 API 调试,反复试错却无法根治疑难 BUG。而所有触摸、按键输入事件的源头管控中枢,正是运行在system_server进程的InputManagerService(IMS)。IMS 与 WMS 窗口管理系统深度耦合,串联 Linux 内核输入驱动、Native 事件解析、跨进程 Socket 通信、应用 View 树四层链路,决定事件该分发到哪个窗口、是否拦截、何时下发 ACTION_CANCEL。市面上多数教程只讲解应用层 View 事件分发,完全跳过系统底层调度逻辑,面试被问到触摸失效、弹窗抢焦点、滑动断触等底层问题时极易卡壳。本文基于 Android13 AOSP 完整源码,自上而下完整拆解Linux 输入驱动→InputReader 原始事件解析→InputDispatcher 窗口决策→InputChannel 跨进程 Socket 传输→ViewRootImpl→DecorView→View 树全链路输入流程,深挖 ACTION_CANCEL 四大底层触发场景、多点触摸冲突、悬浮窗拦截事件核心成因,配套 Perfetto、Systrace 系统级定位工具,给出滑动卡顿、点击无响应、事件丢失线上 Framework 层根治方案。无论是应用 UI 性能优化、Framework 面试备战、ROM 系统定制开发,读完都能打通输入系统完整底层认知。