定义
它是一种广泛运用在应用程序之间传输信息的机制,Android中我们发送广播内容是一个Intent,这个Intent中可以携带我们要发送的数据。
使用方法
1.定义广播接收者
public class MyReceiver extends BroadcastReceiver{
public void onReceiver(Context context,Intent intent)
{
String action intent.getAction();
//do some works
}
}
2.注册广播接收者
注:一般情况下,如果动态广播和静态广播同时发出,最先收到的广播是来自于动态注册的广播,动态注册的接收者会先执行。
静态注册
<receiver android name=".MyReceiver">
<intent-filter>
<action android:name="com.ryg.recriver.LAUNCH"/>
</intent-filter>
</receiver>
动态注册
注:动态注册需要进行解注册操作,静态操作就不需要。
IntentFilter filter = new IntentFilter();
filter.addAction("com.ryg.receiver.LAUNCH");
registerReceiver(new MyReceiver(),filter);
3.发送广播
Intent intent = new Intent();
intent.setAction("com.ryg.receiver.LAUNCH");
sendBroadcast(intent);
分类
无序广播
context.sendBroadcast(Intent)方法发送的广播,不可被拦截,当然发送的数据,接收者是不能进行修改的。
有序广播
context.sendOrderBroadcast(Intent)方法发送的广播,可被拦截,而且接收者是可以修改其中要发送的数据,修改和添加都是可以的,这就意味着优先接收者对数据修改之后,下一个接收者接受的数据是上一个接收者已经修改了的,这必须明白。
本地广播
localBroadcastManager.sendBroadcast(Intent),只在app内传播。
系统广播&本地广播
系统广播分析
a.自定义广播接收者BroadcastReceiver,并且重写onReceiver()方法。
b.通过Binder机制向AMS(Activity Manager Service)进行注册。
c.广播发送者通过Binder机制向AMS发送广播。
d.AMS查找符合条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到相应的BroadcastReceiver(一般情况下是Activity)的消息队列中。
e.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceiver()方法。
本地广播分析
相比于系统广播而言,本地广播更加安全,更加高效,
以下是本地广播的特点以及内部的实现机制:特点:
a.使用它发送的广播将只在自身app内传播,因此你不必担心泄漏隐私的数据。
b.其他app无法对你的app发送该广播,因此你的app根本不可能收到非自身app发送的该广播,因此你不必担心有安全漏洞可以利用。
c.比系统广播更加高效。