Android四大组件之BroadcastReceiver知识点总结

为了便于进行系统级别的消息通知,Android引入了广播信息机制。

BroadcastReceiver总结

    • 广播分类
    • 接收广播
      • 动态注册
      • 静态注册
    • 发送自定义广播
      • 发送标准广播
      • 发送有序广播
    • 使用本地广播

广播分类

Android中的广播主要可以分为两种类型:标准广播有序广播

  • 标准广播(Normal broadcast)是一种完全异步执行的广播。在广播发出后,所有的广播接收器会在统一时刻接收到这条广播消息,没有先后顺序而言,效率较高,同时意味着它是无法被截断的。
    Android四大组件之BroadcastReceiver知识点总结_第1张图片
  • 有序广播(Ordered broadcast)是一种同步执行的广播,广播发出后,同一时刻只有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。此时的广播是有先后顺序的,优先级高的广播接收器可以先收到广播消息,也可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。
    Android四大组件之BroadcastReceiver知识点总结_第2张图片

接收广播

Android内置了很多系统级别的广播,我们可以在应用中监听这些广播来得到各种系统的状态信息,比如电池电量、时间改变等。

动态注册

  1. 新建一个类继承自BroadcastReceiver并重写父类的onReceive()方法。
  2. 创建IntentFilter的实例,添加相应的action。
  3. 在代码中调用registerReceiver()方法进行注册。

动态注册的广播接收器一定要记得调用unregisterReceiver()方法取消注册。

静态注册

动态注册的灵活性较好,但是通过这种方式注册的接收器必须在曾许启动之后才能接收到广播。要想让程序在未启动的情况下接收到广播就需要使用静态注册的方法。

  1. 新建一个类继承自BroadcastReceiver并重写父类的onReceive()方法。
  2. 在AndroidManifest.xml文件中使用标签注册该广播接收器。

发送自定义广播

发送标准广播

Intent intent = new Intent(YOUR_ACTION);
sendBroadcast(intent);

发送有序广播

Intent intent = new Intent(YOUR_ACTION);
sendOrderedBroadcast(intent,null);

sendOrderedBroadcast方法接收两个参数,第一个是Intent,第二个是与权限相关的字符串。
在注册时可以通过android:priority属性(静态)或filter.setPriority(int priority)方法(动态)来设置接收器的优先级,在onReceive方法中可以调用abortBroadcast方法截断这一有序广播,那么优先级低于该接收器的其他接收器就无法接收到该广播。

使用本地广播

与本地广播相对应的是系统全局广播,即发出的广播可以被其他任何应用接收到,这就很容易引起安全性问题,比如说发送的携带关键数据的广播有可能被其他应用截获。

为了解决广播的安全性问题,Android引入了本地广播机制。使用这一机制发出的广播只能在应用内部进行传递,而且广播接收器也只能接收来自本应用程序发出的广播。

主要使用LocalBroadcastManager来对广播进行管理。

private IntentFilter filter;
private LocalReceiver localReceiver;
private LocalBroadcastManager manager;

@Override
protected void onCreate(Bundle savedInstanceState) {
	manager = LocalBroadcastManager.getInstance(this);    //获取实例

	Intent intent = new Intent(YOUR_ACTION);
	manager.sendBroadcast(intent);         //发送本地广播

	filter = new IntentFilter();
	filter.addAction(YOUR_ACTION);
	localReceiver = new LocalReceiver();
	manager.registerReceiver(localReceiver,filter);  //注册本地广播接收器
}

你可能感兴趣的:(Android学习)