BroadcastReceiver的工作过程主要包含两方面的内容,一个是广播的注册,一个是广播的发送和接收。
广播的注册分为两种:
1)静态注册:
直接在Manifest.xml中实现<receiver>,到时会由PackageManagerService完成整个注册过程<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.yyp.receiver.LAUNCH"/>
</intent-filter>
</receiver>
2)动态注册:
通过registerReceiver()注册IntentFilter filter = new IntentFilter();
filter.addAction("com.yyp.receiver.LAUNCH");
registerReceiver(new MyReceiver(), filter);
通过sendBroadcast()发送广播
Intent intent = new Intent();
intent.setAction("com.yyp.receiver.LAUNCH");
sendBroadcast(intent);
一、BroadcastReceiver的注册过程
1、从ContextWrapper的registerReceiver()开始
调用ContextImpl的registerReceiver(),registerReceiver()再调用registerReceiverInternal()。2、registerReceiverInternal()
首先从PackageInfo的getReceiverDispatcher方法获取IIntentReceiver对象,其中InnerReceiver对象和BroadcastReceiver都是在ReceiverDispatcher的构造方法中被保存起来,然后调用ActivityManagerNative.getDefault().registerReceiver(),最终会把远程的InnerReceiver对象以及IntentFilter对象存储起来,注册过程就完成了。二、BroadcastReceiver的发送和接收过程
广播的发送类型有:普通广播、有序广播和粘性广播,有序广播和粘性广播与普通广播相比具有不同特性,但是发送和接收的过程是类似的。