·广播分类:

  • nomal broadcasts是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的
  • ordered broadcasts

注册广播
注册广播的方式一般有两种,在代码中注册和在AndroidManifest.xml中注册,其中前者也被称为动态注册,后者也被称为静态注册。

那么该如何创建一个广播接收器呢?其实只需要新建一个类,让它继承自Broadcast-Receiver,并重写父类的onReceive()方法就行了。这样当有广播到来时,onReceive()方法就会得到执行,具体的逻辑就可以在这个方法中处理。
image.png
动态注册的广播接收器一定都要取消注册才行,这里我们是在onDestroy()方法中通过调用unregisterReceiver()方法来实现的。

  • 动态注册的缺点:

动态注册比较灵活,但因为是在onCreate()方法里面写的,所以必须在程序启动之后才能接受到广播。

  • 静态注册:

image.png
注册广播:
image.png
授予权限和定义intent-filter
image.png

发送自定义广播

  • 发送标准广播

image.png
这里让MyBroadcastReceiver接收一条值为com.example.broadcasttest. MY_BROADCAST的广播,因此待会儿在发送广播的时候,我们就需要发出这样的一条广播

image.png

  • 发送有序广播

image.png

如果在onReceive()方法中调用了abortBroadcast()方法,就表示将这条广播截断,后面的广播接收器将无法再接收到这条广播。

发送本地局部广播

本地广播的用法并不复杂,主要就是使用了一个LocalBroadcastManager来对广播进行管理,并提供了发送广播和注册广播接收器的方法。
image.png
image.png
对比:
以前用的是view.registerReceiver()
view.sendBroadcast()
现在是用LocalBroadcastManager.getInstance(this)方法把view传入localbroadcastmanager方法