回头看Android之broadcastreceiver

什么是broadcastreceiver
broadcastreceiver被译为“广播接收者”。其实我们从这个名字就能够很容易的想到,既然有广播接收者,那一定有广播的发送者。而这个广播的发送者,我们通常认为是Android系统。
首先来看几个例子。我们在日常使用手机的时候,应该会遇到这么以下几个场景:
1、手机电量不足,系统会主动提示你:低电量,请充电;
2、手机开机,咨询类的app会主动推送给你当天的头条热点信息;
3、在线看视频时,突然断网了,手机会主动停止播放视屏,并提示你没有网了。
相信,这些场景大家都曾经遇到过。那么这种机制到底是如何实现的呢?
实际上,很简单。在这些场景中,Android系统充当了一个发送消息的人。当系统出现种种情况时,Android系统会把发生的情况以广播的形式发送出去,通知相应的app做出响应。
Android的广播机制实际上是设计得非常出色的。采用这种机制,很多原本需要开发者自己做的事情现在都不需要了,我们需要做的就是等待通知并做出响应就OK了。实际上,虽然我们也可以自己发送广播,但这种情况出现的几率很小(就我目前的经历来说,即便涉及组件内通信,也没有采用broadcastreceiver机制)。在开发中,我们更多的是去响应系统发送给我们的广播。

实现机制与流程
正如我在前面几篇文章中所谈到的那样,Intent作为Android系统中一种极其重要的消息传递机制,借助它,可以实现跨进程的通信和交互。那么在这里,broadcastreceiver的实现当然也是使用了Intent。在实际中,使用broadcastreceiver也非常简单。
OK,Talk is cheap,show me the code.

第一步:创建BroadcastReceiver的子类:
    由于BroadcastReceiver本质上是一种监听器,所以创建BroadcastReceiver的方法也非常简单,只需要创建一个BroadcastReceiver的子类然后重写onReceive (Context context, Intentintent)方法即可。
    具体代码如下:
    public class BootCompleteReceiver extends BroadcastReceiver {  
private static final String TAG = "BootCompleteReceiver";  
@Override  
public void onReceive(Context context, Intent intent) {  
    Intent service = new Intent(context, MsgPushService.class);  
    context.startService(service);  
    Log.i(TAG, "Boot Complete. Starting MsgPushService...");  
}  
}  
第二步:注册BroadcastReceiver
  一旦实现了BroadcastReceiver,接下就应该指定该BroadcastReceiver能匹配的Intent即注册BroadcastReceiver。
这种方法是在配置AndroidManifest.xml配置文件中注册,通过这种方式注册的广播为常驻型广播,也就是说如果应用程序关闭了,有相应事件触发程序还是会被系统自动调用运行。例如:
<!-- 在配置文件中注册BroadcastReceiver能够匹配的Intent -->  
然后我们需要在AndroidManifest.xml中配置相关信息:
<!-- 开机广播接受者 -->  
<receiver android:name=".BootCompleteReceiver">  
    <intent-filter>  
        <!-- 注册开机广播地址-->  
        <action android:name="android.intent.action.BOOT_COMPLETED"/>  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</receiver>  
<!-- 消息推送服务 -->  
<service android:name=".MsgPushService"/> 

OK。整个流程就是这样
系统状态变化—-》系统发送广播—-》被广播接收器接受到(manifest中的receive和Intent-filter)—-》执行对应的onReceive方法。

其他的更具体的细节,请查看这篇文章
ps:本文参考了这篇文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值