回头看Android之broadcastreceiver
来源:互联网 发布:java web信息管理系统 编辑:程序博客网 时间:2024/04/29 04:38
什么是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:本文参考了这篇文章
- 回头看Android之broadcastreceiver
- 回头看Android之contentprovider
- 回头看Android之activity
- 回头看Android之Intent
- 回头看Android之service
- 回头看Android之handler,message,messagequeue,looper
- 顿悟之回头看ICE
- Android之Intent&BroadcastReceiver
- Android之Service&BroadCastReceiver
- Android之BroadcastReceiver
- android学习之-BroadcastReceiver
- Android之BroadcastReceiver
- Android白眉鹰王之BroadcastReceiver
- android之BroadcastReceiver实例
- Android之BroadcastReceiver组件
- Android之BroadcastReceiver分析
- Android之BroadcastReceiver
- Android之BroadcastReceiver
- HDU 1673 题意难懂啊
- html之动态添加控件实现轮播
- Java多线程-线程同步
- Pushlet之消息通知- 实现服务器端推送技术
- 刷清橙OJ--A1059.求解二元整数不定方程
- 回头看Android之broadcastreceiver
- mfc在CTreeCtrl上添加文件夹图标和文件目录的选择
- JAVA集合-Set集合
- webStorage与cookie的区别
- hibernate框架03
- Win7系统怎么截图?几种简单的win7截图方法
- 286. Walls and Gates
- python装饰器使用
- JAVA集合-List集合