Android 广播机制

一、广播简介:

(一)、广播传播机制:

广播接收器,也被称为全局事件,或系统事件。

当Android系统中任何程序有动作时,如果想通知其他程序,采用广播的形式来传播是非常有效的。广播从理论上说,可以将一个动作传播给任意多个程序(当然广播接收器的数量会受到系统限制)。

在Android中,有一些操作完成以后,会发送广播,比如发出一条短信,或打个电话,如果某个程序接受到这个广播。就会做相应的处理。如果某个程序接收了这个广播就会做 相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播就是因为它只负责而不管你听不听也就是 不管你接收方如何处理。另外广播可以被不只一个应用程序所接收当然也可能不被任何应用程序所接收。

广播机制最大的特点就是发送方并不关心接收方是否接到数据也不关心接收方是如何处理数据的。 Android中广播的是操作系统中产生的各种各样的事件。例如收到一条短信就会产生一个收到短信息的事件。而Android操作系统一旦内 部产生了这些事件就会向所有的广播接收器对象来广播这些事件。

(二)、广播机制的三要素: Android广播机制包含三个基本要素:

1、广播(Broadcast) - 用于发送广播;

2、广播接收器(BroadcastReceiver) - 用于接收广播;

3、意图内容(Intent)-用于保存广播相关信息的媒介。 Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。

(三)、广播的生命周期: 

1、广播接收器仅在它执行这个方法时处于活跃状态。当onReceive()返回后,它即为失活状态

2、拥有一个活跃状态的广播接收器的进程被保护起来而不会被杀死,但仅拥有失活状态组件的进程则会在其它进程需要它所占有的内 存的时候随时被杀掉。

3、如果响应一个广播信息需要很长的一段时间,一般会将其纳入一个衍生的线程中去完成,而不是在主线程内完成它,从而保证用户 交互过程的流畅。广播接收程序的时间限制为10(超过10秒会产生ANR)

二、广播接收器BroadcastReceiver

(一)、概念: BroadcastReceiver(广播接收器)是为了实现系统广播而提供的一种组件,并且广播事件处理机制是系统级别的。比如,我们可以发出一种广播来测试是否收到短信,这时候就可以定义一个BraodcastReceiver来接受广播,当收到短信时提示用户。我们既可以用Intent来启 动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。

我们也可以在自己的应用程序中开发BroadcastReceiver然后把广播接收器这个类或者对象注册到Android操作系统上去让操作系 统知道现在有这样一个广播接收器正在等待接收Android操作系统的广播即在自己的应用程序中实现BroadcastReceiver来监听和响应广 播的Intent

当有广播事件产生时Android操作系统首先告诉注册到其上面的广播接收器产生了一个怎么样的事件每个接收器首先判断是不是我 这个接收器需要的事件如果是它所需要的事件再进行相应的处理。例子我们把骚扰电话的黑名单放到数据库中去当接到电话时会 产生一个接电话事件事先在Android操作系统中注册一个BroadcastReceiver的对象当产生事件的时候会通知我们的广播接收器对 象接收器对象接收到消息之后就会到数据库里面去取所有黑名单电话和接到的这个电话号码进行比较如果匹配就直接挂掉。

(二)、 注册BroadcastReceiver的方法 BroadcastReceiver用于监听被广播的事件Intent),为了达到这个目的BroadcastReceiver必须进行注册注册的方法有以下两

 

1静态注册

静态注册方式是在AndroidManifest.xmlapplication里面定义receiver并设置要接收的action

如果在清单配置文件中配置了广播接收器那么程序在安装后会自动注册广播接收器。 静态注册方式的特点不管该应用程序是否处于活动状态都会进行监听

<receiver

   android:name=".CallReceiver"

   android:export="true"> 

   <intent-filter >

        <action android:name="android.intent.action.PHONE_STATE"/> 

   </intent-filter>

</receiver>

其中MyReceiver为继承BroadcastReceiver的类重写了onReceiver方法并在onReceiver方法中对广播进行处理。<intent-filter>

签设置过滤器接收指定action广播。

2动态注册

动态注册方式是在activity里面调用当前上下文对象的registerReceiver() 方法 来注册和静态的内容差不多。一个形参是receiver象,另一个是IntentFilter对象。而IntentFilter构造方法的参数是要接收的action。 unregisterReceiver() 方法来注销接收器

动态注册方式特点在代码中进行注册后当应用程序关闭后就不再进行监听(关闭应用程序动态注册的会自动注销)

MyReceiver receiver = new MyReceiver(); //创建过滤器并指定action使之用于接收同action的广播

IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE"); //注册广播接收器

registerReceiver(receiver, filter);

(三)、广播接收器的优先级(指的有序广播,最大值是整型的最大值): 有序广播可以进行优先级设置,根据优先级就是的不同接收器接收的先后次序不同

(四)、发送广播:

// 指定广播目标Action

Intent intent = new Intent("MyReceiver_Action");

/ 可通过Intent携带消息 intent.putExtra("msg", "发送广播");

/ 发送广播消息

sendBroadcast(intent);

(五)、注销BroadcastReceiver: 1、一般在onStart中注册BroadcastReceiver,在onStop中取消BroadcastReceiver。

2、一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)时才有效,当从该函数返回后,该对象就无效的了,结束生命 周期。

//注销广播接收器 unregisterReceiver(receiver);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值