关闭

安卓广播之理论篇

标签: 安卓广播
175人阅读 评论(0) 收藏 举报
分类:
------------------
什么叫广播?
-----------------
【比如】
在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,
应用程序开发者也可以监听这些广播并做出程序逻辑的处理

----------------------------
Android广播的分类
----------------------------
1、 普通广播:(Normal broadcasts)
依次传递给各个处理器去处理
完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到
【优点】消息传递的效率比较高
【缺点】接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播

2、 粘性消息:
粘性消息在发送后,一直存在于系统的消息容器里面,
等待对应的处理器去处理
如果暂时没有处理器处理这个消息则一直在消息容器里面处于等待状态。

3、 有序广播:(Ordered broadcasts)

按照处理器的不同优先级来区分的。

【特点】
  1.高优先级的处理器会优先截获这个消息,并且可以将这个消息删除。
  2.按照接收者声明的优先级别(声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-1000到1000。也可以调用IntentFilter对象的        setPriority()进行设置),被接收者依次接收广播。
【例如】
  A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C。
          A得到广播后,可以往广播里存入数据,当广播传给B时,B可以从广播中得到A存入的数据。
【Code】
  Context.sendOrderedBroadcast()    // 发送的是有序广播

  BroadcastReceiver.abortBroadcast()           // 系统会根据接收者声明的优先级别按顺序逐个执行接收者,

前面的接收者有权终止广播,如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。

  setResultExtras(Bundle)       // 前面的接收者可以将处理结果存放进结果对象,然后传给下一个接收者
  Bundle bundle =getResultExtras(true)         // 获取上一个接收者存入在结果对象中的数据

【搞笑的做法】

系统收到短信,发出的广播属于有序广播。如果想阻止用户收到短信,可以通过设置优先级,

让你们自定义的接收者先获取到广播,然后终止广播,这样用户就接收不到短信了。

【案例分析】

一个经典的电话黑名单,首先通过将黑名单号码保存在数据库里面,

当来电时,我们接收到来电广播并将黑名单号码与数据库中的某个数据做匹配,如果匹配的话则做出相应的处理,比如挂掉电话、比如静音等等。。

【注意】
    普通广播和粘性消息不能被截获

    有序广播是可以被截获的

--------------------------
处理器的注册分类
--------------------------
1、 函数代码动态的方式注册
    用代码动态的销毁
    每次用来处理消息的就是同一个实例对象  --- 这样的速度就变快了么??

2、 在配置文件里面静态注册,静态注册有个特点,那就是一旦注册就会一直存在于系统里面,无论应用是否关闭或开关机。(简直就是一个流氓软件病毒啊~)。
    静态注册每处理消息一次,系统new一个处理器处理,并销毁




















0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30224次
    • 积分:864
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:10篇
    • 译文:0篇
    • 评论:11条
    最新评论