外观
如何理解Future 取消与协作终止?
标准回答
cancel(true)通常发出中断请求,任务是否及时退出取决于实现和阻塞操作是否响应中断。某些本地调用、第三方接口或未检查中断的循环可能继续运行。
UI侧应同时使用生命周期和请求版本检查,避免已经失效的任务更新新页面。任务内部在合理位置检查中断,处理InterruptedException时遵循退出或恢复中断状态的契约,并在finally释放资源。
不要只依赖取消成功的返回值来证明所有副作用都被撤销。已完成的文件写入、网络请求或状态修改需要单独的幂等与补偿设计。
追问与回答
用WeakReference就足够了吗
弱引用不能表达当前请求是否有效,也不能保证结果顺序。页面仍存在时,旧请求也可能覆盖新结果,需要版本或会话校验。
内容来源
- Android 与 AI 工程 Wiki · 原条目
q077