Android BroadcastReceiver

广播的概念

Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。
Android系统在运行的过程当中,会产生不少事件,好比开机、电量改变、收发短信、拨打电话、屏幕解锁

广播的两种类型

无序广播:全部跟广播的intent匹配的广播接收者均可以收到该广播,而且是没有前后顺序(同时收到)
有序广播:全部跟广播的intent匹配的广播接收者均可以收到该广播,可是会按照广播接收者的优先级来决定接收的前后顺序
优先级的定义:-1000~1000
最终接收者:全部广播接收者都接收到广播以后,它才接收,而且必定会接收
abortBroadCast:阻止其余接收者接收这条广播,相似拦截,只有有序广播能够被拦截

BroadcastReceiver的生命周期

BroadcastReceiver的生命周期,从对象调用它开始,到onReceiver方法执行完成以后结束。另外,每次广播被接收后会从新建立BroadcastReceiver对象,并在onReceiver方法中执行完就销毁,若是BroadcastReceiver的onReceiver方法中不能在10秒内执行完成,Android会出现ANR异常。因此不要在BroadcastReceiver的onReceiver方法中执行耗时的操做。
若是须要在BroadcastReceiver中执行耗时的操做,能够经过Intent启动Service来完成。但不能绑定Service。
若是咱们在Activity中注册了BroadcastReceiver,当这个Activity销毁的时候要主动撤销注册不然会出现异常。

Ref:http://blog.csdn.net/qq_27280457/article/details/51840678

Android广播机制概述html

Android广播分为两个方面:广播发送者广播接收者,一般状况下,BroadcastReceiver指的就是广播接收者(广播接收器)app

广播做为Android组件间的通讯方式,可使用的场景以下:
1.同一app内部的同一组件内的消息通讯(单个或多个线程之间);异步

2.同一app内部的不一样组件之间的消息通讯(单个进程);post

3.同一app具备多个进程的不一样组件之间的消息通讯;.net

4.不一样app之间的组件之间消息通讯;线程

5.Android系统在特定状况下与App之间的消息通讯。code

从实现原理看上,Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。所以,从实现的角度来看,Android中的广播将广播的发送者和接受者极大程度上解耦,使得系统可以方便集成,更易扩展。具体实现流程要点粗略归纳以下:htm

1.广播接收者BroadcastReceiver经过Binder机制向AMS(Activity Manager Service)进行注册;对象

2.广播发送者经过binder机制向AMS发送广播;blog

3.AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(通常状况下是Activity)相应的消息循环队列中;

4.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。

 对于不一样的广播类型,以及不一样的BroadcastReceiver注册方式,具体实现上会有不一样。但整体流程大体如上。

由此看来,广播发送者和广播接收者分别属于观察者模式中的消息发布和订阅两端,AMS属于中间的处理中心。广播发送者和广播接收者的执行是异步的,发出去的广播不会关心有无接收者接收,也不肯定接收者究竟是什么时候才能接收到。显然,总体流程与EventBus很是相似。

在上文说列举的广播机制具体可使用的场景中,现分析实际应用中的适用性

第一种情形:同一app内部的同一组件内的消息通讯(单个或多个线程之间),实际应用中确定是不会用到广播机制的(虽然能够用),不管是使用扩展变量做用域、基于接口的回调仍是Handler-post/Handler-Message等方式,均可以直接处理此类问题,若适用广播机制,显然有些“杀鸡牛刀”的感受,会显太“重”;

第二种情形:同一app内部的不一样组件之间的消息通讯(单个进程),对于此类需求,在有些教复杂的状况下单纯的依靠基于接口的回调等方式很差处理,此时能够直接使用EventBus等,相对而言,EventBus因为是针对统一进程,用于处理此类需求很是适合,且轻松解耦。能够参见文件《Android各组件/控件间通讯利器之EventBus》。

第3、4、五情形:因为涉及不一样进程间的消息通讯,此时根据实际业务使用广播机制会显得很是适宜。

Ref:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

相关文章
相关标签/搜索