外观
页面退出为什么后台任务仍然执行?
标准回答
Activity 生命周期与普通线程、线程池任务的生命周期是两套机制。页面销毁不会自动停止你创建的任务。任务如果没有取消条件,还可能继续持有旧页面并回调已经失效的 View。
机制解释
为任务明确拥有者:页面级工作随页面或 View 生命周期结束,ViewModel 工作通常随对应 ViewModel 清理,设备会话工作随会话关闭。取消要传递到真正的底层请求或阻塞 I/O,并在结果回调前检查会话或请求是否仍有效。
延伸追问
Future.cancel(true) 就一定停了吗?不一定,它通常发出中断请求,任务和底层操作需要响应中断。对 Socket 等资源,还应按其 API 设计关闭和退出路径。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q24