四大组件浅析(三)——BroadcastReceiver

BroadcastReceiver(广播接受者)在日常开发中也是会经常用到的,本质上为全局的监听者,其分为两个方面:广播的发送者和广播的接受者,主要是用于应用内接受广播发出的消息并做出反应

应用场景:

  • 不同组件之间的通信(包括应用内/应用外)

  • Android系统在特定情况下与app之间的通信(电话、网络)

  • 多线程通信

实现原理:

  • BroadcastReceicer使用观察者模式,基于信息的发布、订阅事件模型

  • broadcastReveicer将观察者和接受者解耦,使更具拓展性,容易集成

广播的类别:

  • 无序广播(Normal Broadcast)

    广播完全异步,可以在同一时间内被任何监听者收到广播消息,效率高,缺点为:接受者不能将处理结果传递给下一个接受者,没有办法停止广播

  • 有序广播(Ordered Broadcast)

    接受者按照声明时定义的优先级来依次收到广播,可以终止广播的向下传输,可以将数据传递给下一个接收者

广播的注册方式

  • 静态注册

    在mainfest中进行注册

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="MyReceiver">
        </action>
    </intent-filter>
</receiver>
  • 动态注册

    通过代码进行注册

 MyReceiver myReceiver = new MyReceiver();
 IntentFilter intentFilter = new IntentFilter();
 intentFilter.addAction("MyReceiver");
 registerReceiver(myReceiver, intentFilter);

发送广播

  • sendBroadcast()发送无序广播

  • sendOrderedBroadcast()发送普通广播

发送广播之后,BroadcastReceiver的onReceive()方法会接收到广播,此时可以进行处理

注意:如果BroadcastReceiver的onReceive()方法在10s内不能执行完毕,那程序会认为程序没有响应,造成

ANR,因此不要在onReceive()方法中进行耗时操作

sendOrderBroadcast()方法发送广播时,BroadcastReceiver会根据优先级依次接收到广播,调用BroadcastReceiverde abortReceiver可以停止广播,使用setResultExtras(Bundle)可以将信息传入Broadcast,可以通过getResultExtras’()获取信息

接收系统广播消息

BroadcaseReceiver处理可以接受用户发送的广播之外,还可以接收 系统广播

常见的系统广播Action常亮有:

  • ACTION_TIME_CHANGED:系统时间被改变。

  • ACTION_DATE_CHANGED:系统日期被改变。

  • ACTION_TIMEZONE_CHANGED:系统时区被改变。

  • ACTION_BOOT_COMPLETED:系统启动完成。

  • ACTION_PACKAGE_ADDED:系统添加包。

  • ACTION_PACKAGE_CHANGED:系统的包改变。

  • ACTION_PACKAGE_REMOVED:系统的包被删除。

  • ACTION_PACKAGE_RESTARTED:系统的包被重启。

  • ACTION_PACKAGE_DATA_CLEARED:系统的包数据被清空。

  • ACTION_BATTERY_CHANGED:电池电量改变。

  • ACTION_BATTERY_LOW:电池电量低。

  • ACTION_POWER_CONNECTED:系统连接电源。

  • ACTION_POWER_DISCONNECTED:系统与电源断开。

  • ACTION_SHUTDOWN:系统被关闭。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值