C2.18.2silent contact drop设计研究

超过上限的触点通常被系统丢弃而非报错提示

别名: 触点丢弃 · 静默丢点 · overflow touch

概念解释

第 N+1 根手指落下时,多数系统不会抛异常、不会振动、也不会弹出“触点过多”。多出来的接触从输入流里消失,已有的 id 继续报点,好像那根手指从未存在。用户看见自己的手按在屏幕上,应用的事件日志是空的。这是静默丢弃,不是取消:被丢掉的接触没有生命周期,因此也没有 cancel 可以清理。

机制

槽表满了之后,控制器的策略通常是忽略新斑块,偶尔是踢掉最老或面积最小的旧斑块来给新指让位。无论哪一种,操作系统很少把“溢出”提升成应用可订阅的错误通道,因为传统 GUI 假定触点流是事实,而不是可能失败的资源分配。应用若只监听 begin/move/end,溢出表现为“少了一个 begin”。用户既得不到失败信号,也无法把被丢的那指改成点击——它不在命中测试里。更麻烦的是部分实现会在稍后旧指抬起时,把一直贴着的第 N+1 指突然收编成新 id,造成一次凭空的 begin,位置还可能跳在屏幕另一侧。

怎么研究

在已知上限的设备上让第 N 指按住,再落下第 N+1 指,对照高速摄影与事件日志。自变量是溢出策略(忽略新指 vs 驱逐旧指,若能从厂商文档或逆向观察区分)、新指落在空白还是落在按钮上、以及旧指随后抬起的顺序。因变量是是否出现 begin、是否有任何错误回调、被丢手指正下方的控件有没有响应、以及旧指抬起后是否冒出迟来的 id。把“用户报告点了没反应”和“日志里根本没有事件”配对,才能把静默丢弃从普通未命中里分出来。

边界

个别工业触摸框架会提供 onPointerRejected 一类回调,那是例外,不能当成消费电子的默认。把新指设计成“修饰键”(例如三指按下才出菜单)时,静默丢弃会让菜单概率性消失,用户以为手势没学会。游戏里用多余的拇指当射击键,溢出时键位直接蒸发。掌托被当成触点占槽,看起来像“手指被丢”,其实槽被手掌占了;要用面积和位置把这两种静默分开。

怎么落地

  • 需要三指以上的操作时,在调试 HUD 里显示当前存活 id 数;一旦达到设备上限,改走可见的按钮或提示,而不是继续等那根不会到来的手指。
  • 不要把“第 N+1 指落下”当成可靠的模式开关;用界面控件或两指以内的手势完成同样的事。
  • 客服和日志里把“有接触无事件”标成一类独立缺陷,避免按未命中或延迟去调按钮尺寸。

延伸

  • 同组C2.18.1 硬件与系统对可同时识别的触点数量有上限 · C2.18.3 多人共用大屏时点数上限决定可同时参与的人数 · C2.18.4 点数上限因设备代际和价位差异很大,不能假设统一支持数
  • 相邻C2.16 触摸事件模型与取消事件 · C3.11 两指与多指轻点
  • 站内检索silent drop · touch overflow · rejected pointer

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C2.18.2