Android 四大组件之BroadCastReceiver

Android广播机制:

Android中有各种各样的广播,如网络的状态,电池的使用情况,来电以及接收短信等都会产生一个广播, 开发者可以接收这些广播,进行一些处理。

例如电话黑名单程序, 当来点的时候,我们将接收到的电话与数据库中的黑名单电话进行匹配,如果发现存在则做一些处理如:静音或直接挂断等操作。

Android中存在三中类型的广播类型:1:标准广播,2:有序广播, 3:粘性广播。

各自特点:

1:标准广播:广播发出后,所有广播接收器都可收到广播,这种效率高,无法被截断。

2:有序广播: 广播发出后,同一时刻只有一个广播接收器能够接收到这条消息,当这个广播接收器的逻辑执行完毕后,广播才会继续传递,所以此时的广播接收器是有先后顺序的, 并且前面的广播接收器可以截断正在传递的广播,这样后面的广播接收器就不能接收到广播了。

3:粘性广播:Intent会一直保留到广播事件结束,而且也没有十秒限制。

使用:

创建广播接收器的过程:

1:创建Intent ,并且使用SendbroadCastReceiver ()发送(普通)广播, 

2:定义一广播接收器,继承BroadCastReceiver 并且覆盖Onreceive()方法,

3:注册广播,注册分为两种(静态与动态)。在代码中注册的称为动态注册,在清单文件中注册的是静态注册,

注意:在优先级相同的情况下,动态注册接收器优先接收到广播,静态注册后与动态注册,先后顺序按照优先级(若有优先级的情况)。

2:动态注册的广播不是常驻型广播:广播跟随activity的声明周期,在activity结束前,移除广播接收器。

3:静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序会被系统调用自动运行。

有序广播:

1:发送:使用sendOrderBroadcast()发送广播(有序)。

2:在<inter-filter >中使用android:priority 属性,指定广播接收器的优先级,数值范围在“-10001000” 数值越大,优先级越高。

3:在广播接收器中使用setResultExtras ()方法将一个Bundle对象,设置为结果集对象,集合。

4:使用sendOrderBroadCastReceiver ()发送有序广播时,需要一个权限参数,如果为null, 则表示不要接受者声明指定的权限,如果不为null,则表示接受者需要指明权限,这样做主要是考虑安全。

当然有序广播,可以终止广播的使用,可使用abortBroadCast ()。

粘性广播:

发送的时候使用sendStickyBroadcast()。

粘性广播在使用的时候必须声明权限。

粘性广播,可以先发送,后注册。

广播的注销:

Activity中代码注销广播建议在onPause ()中注销,

特别注意: 

每次当广播来时,会重新创建BroadCastReceiver对象,并且调用onReceive()方法, 执行完以后,该对象被销毁,当onReceive()方法在10秒内没有执行完成,Android会认为该程序无响应,所以在BroadCastReceiver里不能做一些比较耗时的操作,否则会弹出ANRApplication  NO  Response )的对话框。

怎么用好BroadCastReceiver

如果需要完成一项比较耗时的工作,应该通过发送IntentService ,由Service来完成,这里不能使用子线程,因为BroadCastReceiver的生命周期很短, 子线程可能还没有结束BroadCastReceiver就先结束了,BroadCastReceiver一旦结束,此时BroadCastReceiver的所在进程很容易在系统需要内存时被优先杀死,因为它 属于空进程(没有任何组件的进程)如果它的宿主进程被杀死 ,那么正在工作的子线程也会被杀死,所以采用子线程来解决是不靠谱的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Android广播机制:

Android中有各种各样的广播,如网络的状态,电池的使用情况,来电以及接收短信等都会产生一个广播, 开发者可以接收这些广播,进行一些处理。

例如电话黑名单程序, 当来点的时候,我们将接收到的电话与数据库中的黑名单电话进行匹配,如果发现存在则做一些处理如:静音或直接挂断等操作。

Android中存在三中类型的广播类型:1:标准广播,2:有序广播, 3:粘性广播。

各自特点:

1:标准广播:广播发出后,所有广播接收器都可收到广播,这种效率高,无法被截断。

2:有序广播: 广播发出后,同一时刻只有一个广播接收器能够接收到这条消息,当这个广播接收器的逻辑执行完毕后,广播才会继续传递,所以此时的广播接收器是有先后顺序的, 并且前面的广播接收器可以截断正在传递的广播,这样后面的广播接收器就不能接收到广播了。

3:粘性广播:Intent会一直保留到广播事件结束,而且也没有十秒限制。

使用:

创建广播接收器的过程:

1:创建Intent ,并且使用SendbroadCastReceiver ()发送(普通)广播, 

2:定义一广播接收器,继承BroadCastReceiver 并且覆盖Onreceive()方法,

3:注册广播,注册分为两种(静态与动态)。在代码中注册的称为动态注册,在清单文件中注册的是静态注册,

注意:在优先级相同的情况下,动态注册接收器优先接收到广播,静态注册后与动态注册,先后顺序按照优先级(若有优先级的情况)。

2:动态注册的广播不是常驻型广播:广播跟随activity的声明周期,在activity结束前,移除广播接收器。

3:静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序会被系统调用自动运行。

有序广播:

1:发送:使用sendOrderBroadcast()发送广播(有序)。

2:在<inter-filter >中使用android:priority 属性,指定广播接收器的优先级,数值范围在“-10001000” 数值越大,优先级越高。

3:在广播接收器中使用setResultExtras ()方法将一个Bundle对象,设置为结果集对象,集合。

4:使用sendOrderBroadCastReceiver ()发送有序广播时,需要一个权限参数,如果为null, 则表示不要接受者声明指定的权限,如果不为null,则表示接受者需要指明权限,这样做主要是考虑安全。

当然有序广播,可以终止广播的使用,可使用abortBroadCast ()。

粘性广播:

发送的时候使用sendStickyBroadcast()。

粘性广播在使用的时候必须声明权限。

粘性广播,可以先发送,后注册。

广播的注销:

Activity中代码注销广播建议在onPause ()中注销,

特别注意: 

每次当广播来时,会重新创建BroadCastReceiver对象,并且调用onReceive()方法, 执行完以后,该对象被销毁,当onReceive()方法在10秒内没有执行完成,Android会认为该程序无响应,所以在BroadCastReceiver里不能做一些比较耗时的操作,否则会弹出ANRApplication  NO  Response )的对话框。

怎么用好BroadCastReceiver

如果需要完成一项比较耗时的工作,应该通过发送IntentService ,由Service来完成,这里不能使用子线程,因为BroadCastReceiver的生命周期很短, 子线程可能还没有结束BroadCastReceiver就先结束了,BroadCastReceiver一旦结束,此时BroadCastReceiver的所在进程很容易在系统需要内存时被优先杀死,因为它 属于空进程(没有任何组件的进程)如果它的宿主进程被杀死 ,那么正在工作的子线程也会被杀死,所以采用子线程来解决是不靠谱的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值