Skip to content
阅读进度

BroadcastReceiver 为什么不能直接做长任务? ​

返回 Android 核心 目录

标准回答 ​

广播接收器适合快速处理事件,不适合在 onReceive 中执行长时间 I/O。默认回调通常在主线程,耗时操作既可能阻塞界面,也可能超过广播处理时限。goAsync 可以在回调返回后短暂完成工作,但仍有时限,必须调用 PendingResult.finish。

机制解释 ​

“切到后台线程”不等于广播任务就能无限运行。可延迟、要求最终完成的任务考虑 WorkManager;实时且持续的任务根据系统后台规则选择合适机制。动态注册要与拥有者生命周期对应,跨应用广播还需考虑导出策略和权限校验。

延伸追问 ​

为什么退出页面后还收到广播?可能注册对象的生命周期比页面长,或没有注销。先确认接收者拥有者,再检查注册与清理是否成对。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。