android 广播的发送和接收

    在Android中 Broadcast是一种 广泛运用在引用程序之间传输信息的机制。
而BroadcastReceiver 是对发送出来的Broadcaset进行过滤接受并响应的一类组件。
如果不需发送广播到别的应用 使用 LocalBroadcastManger就可以了。

发送和接收流程

发送和接受的过程:

1. 发送
    首先在需要发送信息的地方 ,把要发送的信息和用于过滤的信息(如action 和 category)封装进intent对象,然后调用 Context.sendBroadcast() 、sendOrderBroadcast()或sendStickBroadcast()方法,把intent对象以广播的形式发送出去
2. 接收
    当intent发送后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的intent匹配。若匹配就会调用BroadcastReceiver的onReceiver() 方法。所以 我们定义一个BroadcastReceiver的时候必须实现onReceiver()方法
3. Note:
    若在使用sendBroadcast()的方法时指定了接受权限,则只有在AndroidManifest.xml文件中声明了对应权限的BroadcastReceiver才能就收到;
    同样的,如果在注册BroadcastReceiver时指定了可接受的Broadcast的权限,则只有在包的AndroidManifest.xml中用标签声明了。拥有此权限的Context对象所发送的Broadcast才能被这个BroadcastReceiver所接收。

虽然 广播的发送和接受都是通过intent类,但是广播intent完全和 启动activity的intent不同。
BroadcastReceiver是无法看到启动activity的intent的。同样的,当你发送一个Broadcast Intent 是不会去发现或启动一个activity的。
两者是完全不同的。启动activity的intent是属于前台用户可以看到的操作,而 Broadcat Intent是后台操作 。通常用户是看不到 的。*

广播类型

两大类 广播类型 :
- 1. Normal broadcasts(普通广播) :使用 Context.sendBroadcast ;完全是异步操作,广播发出后广播的所有接受者通常都在同一时间运行并得到结果,但是顺序不固定。这样效率是很高的但是 接收器的结果并不能影响其他的接受者
- 2. Orderd broadcasts(有序广播) :同步操作一次发送到一个接受者 ,按照预先声明的顺序依次接受,(-1000~1000)优先级高的优先接受到广播,优先级高的可以更改广播或者完全终止这个广播(abortBroadcast()),那优先级低的接受者将不能接受到

接收广播

使用broadcastsReceiver 接受广播,定义自己的广播接收器 只需继承BroadcastsReceiver;
广播接收器创建完毕后需要注册才能接受到。注册分为两种 动态和静态;如果发送的广播附带有权限 ,那接受者必须有相应的权限才能接受到

在BroadcastReceiver中一般是用来启动 某个activity或者启动某个服务,不允许执行耗时操作,也不允许开线程,最好是操作不要超过10秒。*

android 开发中,广播是经常会用到的,我来记录一下动态注册广播的简单用法

一、自定义一个广播+接收广播
    public class MyBroadcastReceiver extends BroadcastReceiver {
        &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值