Broadcast 分析之 registerReceiver()
注册广播接收者
// frameworks/base/core/java/android/content/Context.java
public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver,IntentFilter filter);
最后会调用到 ContextImpl
// frameworks/base/core/java/android/app/ContextImpl.java
@Override
public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
return registerReceiver(receiver, filter, null, null);
}
private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId,
IntentFilter filter, String broadcastPermission,
Handler scheduler, Context context, int flags) {
// frameworks/base/core/java/android/app/ContextImpl.java
IIntentReceiver rd = null;
if (receiver != null) {
if (mPackageInfo != null && context != null) {
if (scheduler == null) {
scheduler = mMainThread.getHandler();
}
// 1. 构造 IIntentReceiver, 在这里会传入 receiver 实例,方便后面回调 onReceive()
rd = mPackageInfo.getReceiverDispatcher(
receiver, context, scheduler,
mMainThread.getInstrumentation(), true);
} else {
if (scheduler == null) {
scheduler = mMainThread.getHandler();
}
rd = new LoadedApk.ReceiverDispatcher(
receiver, context, scheduler, null