G4.06.3nested tasks need an explicit return stack设计研究

多层嵌套任务需要明确的返回栈

别名: 嵌套任务返回栈 · nested back stack · 多层子任务 · task stack

概念解释

选地址时又要在地图上搜地点,搜地点时又要授权定位——每一层都是一个尚未完成的任务。多层嵌套需要明确的返回栈:每一层记住自己的调用者,关闭时只把自己弹掉,把结果交给上一层,而不是把整座塔拆到首页。它不是浏览器 history 的替代品,而是产品在任务图上维护的一条 back stack,专门描述「谁在等谁的返回值」。

机制

一层子任务还能靠「原槽」这一个锚点撑住。两层以上,锚点本身也在等:地图在等搜索的结果,表单在等地图的结果。若只有一个「返回主流程」指针,中间层被跳过,搜索选出的点没有地方落地,或直接写进了最外层表单,把地图的中间态丢掉。人看到的是「我在搜,点一下却填进了订单」,层次塌缩。

浏览器 history 按打开顺序排列,并不按任务调用排列。地图上再开搜索,history 是 表单 → 地图 → 搜索;但搜索取消应回到地图而不是表单,搜索完成应把点交给地图而不是交给表单。两套栈若焊在一起,系统 Back 会按时间弹,任务 Back 会按调用弹,落点对不上。明确的任务栈把每一帧标成 {caller, slot, expected result},弹栈只发生在该层关闭时。超过两层还不画出栈,人会用系统返回连按,直到某一次把主流程也弹掉。

怎么研究

构造至少三层:主表 → 选择器 → 选择器内部的搜索或授权。在最内层完成或取消,记录每一层收到什么、人以为自己在哪一层。

  • 自变量:是否维护独立任务栈、系统 Back 是否与任务栈对齐、中间层被跳过还是被保留。
  • 因变量:结果落在哪一层、误把内层结果写进最外层、连按返回是否拆掉主表。
  • 方法论注意点:两层测不出塌缩,必须有中间层要消费内层结果。指导语不要说「返回表单」,要说「完成你正在做的这件事」,否则被试会主动跳层。Android 的 activity back stack 和浏览器 history 要分开记分,不要假设它们已经一致。

边界

永远只有一层子任务的产品不需要单独的任务栈,一个返回锚点足够。递归很深(文件管理器里一层层文件夹)是浏览层级,不是「带返回值的调用」,应按层级 Up 而不是按调用栈弹。并行的两个子任务(两个窗口各填各的)不是嵌套,不能压进同一条栈。

怎么落地

  • 为嵌套子任务维护一条显式栈,每层记录调用者、等待填充的槽、预期结果类型;关闭一层只 pop 一层。
  • 系统 Back 在子任务仍然打开时弹出任务栈的顶,而不是浏览器历史里可能存在的更早一帧;主流程在栈底,弹到栈底之前不要卸载。
  • 中间层必须有机会消费内层结果(地图先收下搜索的点,再交给表单),禁止内层直接写最外层字段。
  • 验证:表单 → 地图 → 搜索,在搜索里选一个点。地图应显示该点并可确认,确认后表单槽才有值。在搜索里取消,应回到地图而不是表单。从搜索连按系统返回,应搜索 → 地图 → 表单,不准从搜索直接出表。

延伸

  • 同组G4.06.1 中途跳出执行子任务后需回到原位 · G4.06.2 子任务的结果需带回主流程
  • 相邻G4.01 返回栈与返回语义 · G2.01 层级导航 · H1.01 表单长度与分步
  • 站内检索nested back stack · task stack · call and return

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/G4.06.3