I2.06.1long wait must be cancellable设计

长等待必须可取消

别名: 加载可取消 · 长等待出口 · cancellable load

概念解释

加载一旦拖过还能把思路维持在这件事上的窗口,人就开始需要一条合法的离开:取消。取消在这里是加载语义上的操作——停止这次取数或这次长任务,而不是系统超时策略里「有一个放弃出口」那么一层。系统层面的超时策略只要求放弃出口存在即可;这里的要求更硬:长等待的界面上,取消是一等控件,和进度一起出现,人不必去杀应用、关页、拔网。

机制

长等待把人的注意和时间押在一条自己不能推进的路上。押注可以自愿延长,但必须能撤。没有取消时,撤的手段会外溢到操作系统:手势返回、划掉任务、关标签。那些手段的粒度错了——可能拆掉整次会话,也可能根本没通知到正在跑的请求,于是出现「我以为停了、它还在写」。产品内取消把粒度收到这次加载:只结束这一笔,上下文还在。

长的判据是任务,不是动画。导出、同步、大文件、跨海查询,即使用了确定进度,也必须可取消,因为进度只回答「还要多久」,不回答「我还能不能反悔」。短到还在即时或连续思维窗口里的请求,取消按钮自己会成为闪烁;那不是反对取消,是反对给来不及看见的等待配一套取消皮。

边界

不可中断的短握手(支付向银行确认的那几秒)可以没有取消,但必须真短,并在进入前说明;拖长了就回到必须可取消。取消若会留下半写入的危险状态,不是因此省略按钮,而是取消之后必须说清半写入怎么处置:是回滚、保留草稿还是标记不完整。后台已经接受、即使取消界面也无法撤回的作业(已提交的打印队列),按钮应改成「停止显示进度并去任务列表」,不要标成能撤回的取消。模态把取消做成系统返回键的副作用,等于没有一等控件:不是人人都会用那条键,也不知道它取消的是加载还是整页。

怎么落地

  • 凡预计会越过连续思维窗口、人还留在这个界面里盯着的加载,在进度或等待皮旁放可见的取消。
  • 不要把取消只藏在系统手势里。手势可以是第二条路,不能是唯一的路。
  • 短请求不要为了对称而闪一个取消;长请求不要因为「已经有进度条」就省略取消。
  • 验证:开始一次至少十几秒的加载。不看文档,能否在等待界面上直接点停。只能关应用或等它自己完,就说明没做到。

延伸

  • 同组I2.06.2 取消需真正中止而非仅隐藏 · I2.06.3 取消后需说明已完成部分的处置
  • 相邻I1.06 超时策略 · I1.03 注意力保持上限 · I3.07 后台任务
  • 站内检索cancellable load · abort request · long-wait cancel

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I2.06.1