外观
如何理解异步结果版本校验的 Java 实现?
标准回答
下面是可放入Android项目的通用请求门控示例,所有load和close调用必须在主线程。后台只执行数据计算,主线程交付时检查closed和请求版本;新请求会尝试取消旧任务,版本检查仍负责拒绝已经晚到的结果。
Activity或Fragment应在对应生命周期结束时调用close,并且每个新实例创建自己的门控对象。示例使用单工作线程与容量为1的等待队列,提交新请求前移除已取消的排队任务;真实I/O还要配置自身超时,因为不响应中断的旧任务可能延迟新任务。
接口中的callback本身也可能持有页面;取消和拒绝交付能保证逻辑正确,但对不退出的长任务还要避免长期持有UI对象。这个代码是练习,不替代具体业务的错误处理和资源协议。
追问与回答
为什么cancel后还检查generation
中断并不保证停止,结果可能已排入主线程队列。generation保证只有当前请求有资格交付。
内容来源
- Android 与 AI 工程 Wiki · 原条目
q084