先把结论放在前面:BroadcastReceiver 的答案分三层——"能收到广播"是 API 层、"知道哪些广播被限制"是机制层、"知道替代方案是什么"是工程层。Android 8 之后隐式广播被大幅限制、9 之后后台广播进一步收紧,能答到第三层的人才算真懂。
BroadcastReceiver 看起来是个简单组件,追问起来全是版本变化和限制规则。这篇按"是什么 → 怎么工作 → 限制在哪 → 怎么办"四步讲清。
两种注册,两条投递路径
静态注册写在清单里,由系统在应用启动时(ContentProvider初始化之后、Application.onCreate之前)建立接收器,进程被杀时也能收到——但受后台广播限制。
<receiver android:name=".NetworkChangeReceiver" android:exported="false"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>动态注册通过registerReceiver在运行时建立,必须与注册所在的 Context 生命周期对应