Android广播机制

BroadcastReceiver是Android四大组件之一,这种组件本质上就是一种全局的监听器,用于监听系统全局的广播消息。由于BroadcastReceiver是一种全局的监听器,因此它可以非常方便地实现系统中不同组件之间的通信。


BroadcastReceiver用于接收程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent,与应用程序启动Activity、Service相同的是,程序启动BroadcastReceiver也只需要两步。

1)创建需要启动的BroadcastReceiver的Intent。

2)调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定BroadcastReceiver。


onXxxListener只是程序级别的监听器,这些监听器运行在指定程序所在进程中,当程序退出时,OnXxxListener监听器也就随之关闭。但BroadcastReceiver属于系统级的监听器,它拥有自己的进程,只要存在与之匹配的Intent被广播出来,BroadcastReceiver总会被激发。


每次系统Broadcast事件发生后,系统就会创建对应的BroadcastReceiver的实例,并自动触发它的onReceiver()方法,onReceiver()方法执行完后,BroadcastReveiver的实例就会被销毁。


如果BroadcastReceiver的onReceiver()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在BroadcastReceiver的onReceiver()方法里执行一些耗时的操作,否则会弹出ANR(Application No Response)的对话框。


如果需要根据Broadcast来完成一项比较耗时的操作,则可以考虑通过Intent启动一个Service来完成该操作。不赢考虑使用新线程去完成耗时的操作,因为BroadcastReceiver本身的生命周期很短,可能出现的情况是子线程还没有结束,BroadcastReceiver就已经退出。


如果BroadcastReceiver所在的进程结束了,虽然该进程内还有用户启动新线程,但由于该进程内不包含任何活动组件,因此系统可能在内存紧张时有限结束该进程。这样就可能导致BroadcastReceiver启动的子线程不能执行完成。


BroadcastReceiver用于监听被广播的事件(Intent)为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:
1.在应用程序的代码当中进行注册。

2.在AndroidManifest.xml当中进行注册。


Android内置的Broadcast Actions

在Andorid平台中,内置了很多Action,用于帮助开发者监听手机上所发生的各种事件,以下是一些比较常见的Action,完整的Action列表可以参考:

Acton名称触发场景
ACTION_CAMERA_BUTTONBroadcast Action:The "Camera Button"was pressed.
ACTION_BATTERY_LOWBroadcast Action:Indicates low battery condition on the device.
ACTION_DATE_CHANGEDBroadcast Action:The date has changed.
ACTION_POWER_CONNECTEDBroadcast Action:External power has been connected to the device.
ACTION_REBOOTBroadcast Action:Have the device reboot.
ACTION_SCREEN_ONBroadcast Action:Sent after the screen turns on.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值