Android四大组件之Broadcast

BoardcastReceiver

1.两种广播类型

(1)按传播方式分类

标准广播:完全异步执行的广播,发出广播后,所有广播接收器几乎同时收到该广播通知

有序广播:同步执行的一种广播,发出广播后,同一时间只能有一个广播接收者能收到,当这个广播接收者的逻辑执行完后,才会传递到下一个接收者;当然,前面的接收者还可以阶段广播的传递,那么后续接收者就无法收到广播消息了。

(2)按传播范围分类

全局广播:当前App发出的广播其他App可收到,反之亦然

本地广播:发出的广播只能在App内部传播,而广播接收者也只能收到本应用发出的广播

2.两种注册广播的方式

动态注册:是在java代码中指定IntentFilter,然后添加不同的Action;动态添加的广播,一定要用unregisterReceiver让广播取消注册。

静态注册:动态注册需要在程序启动后才能接受广播,静态广播弥补了这个短板,在AndroidManifest文件中定义IntentReceiver就可以让整个程序在未启动的情况下就可以收到广播了。

3.发送广播

发送广播前,要先定义一个接收器(BroadcastReceiver),重写onReceive(),注册下;

(1)标准广播:sendBroadcast(intent)

(2)有序广播:sendOrderedBroadcast(intent,null)

可以在清单文件中的intent-filter中通过android:priority="100"设置优先级,值越大优先级越高,越先收到广播,而且还可以调用abortBroadcast拦截广播的继续传递,priority可选值为:-1000~1000之间。

4.本地广播

(1)核心用法

使用LocalBroadcastManager来管理广播:

a.使用LocalBroadcastManager.getInstance()获得实例

b.调用~.registerReceiver()注册广播

c.调用~.sendBroadcast()发送广播

d.调用~.unregisterReceiver()取消注册

PS:本地广播无法通过静态注册方式来接受,相比起全局广播更加高效

(2)注意事项
a.在广播中启动Activity时需要为intent加入FLAG_ACTIVITY_NEW_TASK的标记,不然会报错,因为需要一个栈来存放新打开的Activity。

b.广播中弹出AlertDialog时需要设置对话框的类型为TYPE_SYSTEM_ALERT,不然是无法弹出的

5.广播和EventBus的区别

(1)广播的优缺点

优点:

a.同SDK的交互比较好,它可以直接获得Context和Intent

b.如果同Android交互,选择广播更便捷

缺点:

a.广播比较耗时间和空间

(2)EventBus的优缺点

优点:

a.灵活度高,不需要依赖Context

b.粘性事件能够保证,通知当时不在场时也能收到通知

c.父类对于通知的监听和处理能够继承给子类,可简化代码

d.通知的优先级,能够保证 Subscriber 关注最重要的通知

缺点:

a.不能跨进程通信,只能在应用内通信

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值