赞
踩
在Android系统中,广播是一种运用在组件之间传递消息的机制。该机制使用了观察者模式,该模型中的消息发布者是广播机制中的广播发送者,消息订阅者是广播机制中的广播接收者。
名称 | 作用 |
---|---|
活动(Activity) | 所有Android应用程序的门面,凡是在应用中能看到的东西,都是放在活动中的 |
服务(Service) | 比较低调,无法看到,但是会在后台默默地运行;即使用户推出了应用,服务仍然可以继续运行 |
广播接收器(Broadcast Receiver) | 允许应用接收来自各处的广播消息,如电话、短信等;也可以向外发出广播消息 |
内容提供器(Content Provider) | 为应用程序之间共享数据提供了可能,比如需要读取联系电话薄中的联系人就要通过Content Provider来实现 |
1、在同一个APP内部的同一组件内进行消息通信
2、在同一个APP内部的不同组件之间进行消息通信
3、在同一个APP具有多个进程的不同组件之间进行消息通信
4、在不同APP的组件之间进行消息通信
5、Android系统与APP之间进行消息通信
Android系统中内置了很多广播,为了监听来自系统或者应用程序的广播事件,Android系统提供了BroadcastReceiver(广播接收者)组件。当Android系统产生一个广播事件时,可以由多个对应的广播接收者接收并进行处理。这些广播接收者只需要在清单文件或者代码中进行注册并指定要接收的广播事件即可。
1、通过在应用程序的包中创建一个类继承BroadcastReceiver并重写onReceive()方法来实现的。
2、通过选中应用程序中的包,右击选择【New】→【Other】→【Broadcast Receiver】选项来创建的。
注意:创建完广播接收者之后还需要对广播接收者进行注册才可以接收广播。
1、动态注册:在Activity中通过代码注册广播接收者
2、静态注册:在清单文件中配置广播接收者
当系统提供的广播不能满足实际需求时,可以自定义广播,同时需要编写对应的广播接收者。
当自定义广播发送消息时,会存储到公共消息区中,而公共消息区中如果存在对应的广播接收者,就会及时的接收这条信息。
名称 | 说明 | 优缺点 |
---|---|---|
无序广播 | 无序广播是完全异步执行,发送广播时所有监听这个广播的广播接收者都会接收到此消息,但接收的顺序不确定 | 效率比较高,但无法被拦截,当发送一条广播消息时,所有的广播接收者都会接收到此消息 |
有序广播 | 按照接收者的优先级接收,只有一个广播接收者能接收消息,在此广播接收者中逻辑执行完毕后,才会继续传递 | 效率低,但有先后顺序,并可被拦截 |
在动态注册广播接收者时,可以使用IntentFilter对象的setPriority()方法设置优先级别,例如:intentFilter.setPriority(1000)。这里需要说明的是,属性值越大,优先级越高。
如果两个广播接收者的优先级相同,则先注册的广播接收者优先级高。也就是说,如果两个程序监听了同一个广播事件,同时设置了相同的优先级,则先安装的程序优先接收。
当发送一条有序广播时,要保证一个广播接收者必须接收到此广播,无论此广播接收者的优先级高或低。要满足这种需求,可以在Activity中使用sendOrderedBroadcast()方法发送有序广播,并设置该方法中传递的第3个参数为指定的广播接收者对象即可。
Intent intent = new Intent();
intent.setAction(“Count_Ducks”); // 定义广播的事件类型
MyBroadcastReceiverThree receiver = new MyBroadcastReceiverThree();
sendOrderedBroadcast(intent,null,receiver, null, 0, null, null); // 发送有序广播
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。