android系统性学习 2.3.0 —— 四大组件之Broadcast Receivers

开始:

android系统性学习 2.3.0 —— 四大组件之Broadcast Receivers

理解广播与广播接收器:

1. 广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件处理)
 
2. 一个应用可以在发生特定事件时发送Broadcast, 系统中任何应用只要注册了对应Receiver就会接收到此Broadcast
 
3. 一个应用如果对某个广播感兴趣, 就可以注册对应的Receiver来接收广播
 
4. 广播事件机制是应用程序(进程间)之间通信的一种手段
 
相关API
 
Context
sendBroadcast(Intent intent) : 发送一般广播
sendOrderedBroadcast(Intent intent,String) : 发送有序广播
registerReceiver(receiver, intentFilter) : 注册广播接收器
unRegisterReceiver(receiver) : 解注册广播接收器
 
BroadcastReceiver
onReceive(Context context, Intent intent) : 接收到广播的回调
abortBroadcast() : 中断广播的继续传播

                    boolean isOrderedBroadcast() : 判断是否是有序广播

常见系统广播

收到短信广播 : android.provider.Telephony.SMS_RECEIVED
 
开机完成广播 : Intent.ACTION_BOOT_COMPLETED
 
应用被卸载广播 : Intent.ACTION_PACKAGE_REMOVED
 
手机锁屏 : Intent.ACTION_SCREEN_OFF
 
手机开屏 : Intent.ACTION_SCREEN_ON
 
注册广播接收器
 
方式一:  配置文件注册(静态注册)
 

       <receiver android:name="cn.njit.br.MyBroadcastReceiver">

            <!--priority指定当前receiver的优先级, 值是0-1000, 越大越好  -->

            <intent-filter android:priority="500">

                <action android:name="cn.njit.br.mybroadcastreceiver"/>

            </intent-filter>

        </receiver>

方式二:  硬编码注册(动态注册)

MyBroadcastReceiver2 receiver2 = new MyBroadcastReceiver2();

IntentFilter filter = new IntentFilter(action);

registerReceiver(receiver2, filter);

区别静态注册与动态注册

 

静态注册

动态注册

注册方式

配置文件

Java代码

注册的时间

应用安装成功/手机开机完成

注册时不会创建对象

接收到广播才创建

执行registerReceiver(receiver, intentFilter)

 

注册就创建对象

生命结束的时间

(解注册)

应用卸载

对象执行onReceive()后就回收了

执行unregisterReceiver()

(activity退出必须解注册)

解注册后对象被回收

应用情景

需要监听的时间为应用的整个生命过程中

服务于某个Activity/Se

rvice

发送两种类型的广播

1.发送一般广播

context.sendBroadCast(Intent intent)

2.发送有序广播

context.sendOrderedBroadcast(Intent intent)

3.区别两种广播

 

一般广播

有序广播

多人接收时是否有序

无序, 都会同时执行

有序,根据优先级和注册先后依次执行

是否可以中断

不可以

可以, 通过br.abortBroadcast()

中断后, 后面的接收器不能接收到此广播

 

 

 

 

图解两种类型的广播

android系统性学习 2.3.0 —— 四大组件之Broadcast Receivers