回头看Android之broadcastreceiver
2017-06-12 09:22
281 查看
什么是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.
OK。整个流程就是这样
系统状态变化—-》系统发送广播—-》被广播接收器接受到(manifest中的receive和Intent-filter)—-》执行对应的onReceive方法。
其他的更具体的细节,请查看这篇文章
ps:本文参考了这篇文章
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:本文参考了这篇文章
相关文章推荐
- Android Service BroadcastReceiver
- Android (BroadcastReceiver与程序的开机自启动)
- Android的短信接收处理----Broadcast和Receiver的使用
- Android提高第六篇之BroadcastReceiver
- Android 中 Intent.ACTION_PACKAGE_ADDED 之类的 broadcast 可被声明在 manifest 中的 receiver 接收吗?
- android BroadcastReceiver
- Android提高第六篇之BroadcastReceiver
- Android四大组件之Broadcast Receiver
- Android应用实例之----基于BroadCastReceiver的SD卡装载卸载实例!
- Android提高第六篇之BroadcastReceiver
- android下Service BroadcastReceiver与AlarmManager
- Android BroadcastReceiver 学习
- Android BroadcastReceiver介绍
- 精通android之Broadcast Receiver
- Android (BroadcastReceiver与程序的开机自启动)
- Android BroadcastReceiver 学习 推荐
- Android 中 BroadcastReceiver以及 Broadcast的简单应用
- android 之broadcast receiver
- Android提高第六篇之BroadcastReceiver
- [Android] Android BroadcastReceiver 学习