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

来源:互联网 发布:盗墓笔记宠物进阶数据 编辑:程序博客网 时间:2024/06/04 01:01

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 0
原创粉丝点击