安卓学习笔记2_Broadcast广播
今天看了<第一行代码>的第五章"全局大喇叭-详解广播机制".刚学完总结一下.
广播的接收也是根据,Intent接收的.
与Activity使用Intent互相启动类似,Broadcast也是使用Intent进行广播.区别在于广播的发送,sendBoradcast(Intent intent)
,是全局广播形式的发送,所有可以接收到该广播的组件都可以进行响应.
1:Broadcast的接收
Broadcast的注册分为动态注册和静态注册两种.
动态注册:在需要接收广播的组件中使用内部类的方法,创建`Receiver类,继承BroadcastReceiver重写onReceiver()
方法
其可以在代码中,自由地控制注册与注销,在灵活性方面有很大的优势.
但是它存在这一个缺点,就是必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreate()
方法中的.
静态注册:自定义一个Receiver类,继承BroadcastRecever, 重写onReceiver()
方法
静态注册接收器,一定要在AndroidManifest.xml
配置文件中注册才可以使用.
与隐式启动Activity类似,也是在<Receiver>
标签中定义<Intent-filter>
过滤广播进行控制.
静态注册的广播可以让程序在未启动的情况下就能接受到广播.
2:Broadcast的发送-自定义广播
1:广播有两种:标准广播和有序广播.
标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同时接收到这条广播消息,因为它们之间没有任何先后顺序可言.这种广播的效率会比较高,但同时也意味着它是无法被截断的.\
有序广播(Ordered broadcasts)是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器的逻辑执行完毕后,广播才会继续传递.这种时候广播的接收器,是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播.
注:标准广播与有序广播,仅仅是在于广播发送时,代码中的方法不同.
标准广播使用sendBroadcast(Intent intent, 目标))
进行广播的发送;而有序广播使用sendOrderedBroadcast(Intent intent, null)
进行发送.
2:本地广播
无论是标准广播还是有序广播,广播都是系统全局发送的.也就是这些广播可以跨应用发送.
如果某些广播不想被别的应用知道,规避一些安全问题的话.就要使用本地广播了.
本地广播使用LocalBroadcastManager
类对广播进行管理.并提供了发送广播和注册广播接收器的方法.