zoukankan      html  css  js  c++  java
  • BroadcastReceiver介绍

    参考资料 : 基础总结篇之五:BroadcastReceiver应用详解

      BroadcastReceiver用于接收广播信息,可以通过sendBroadcast等方法进行发送。sendBroadcast、sendOrderedBroadcast、sendStickBroadcast都是android.content.ContextWrapper类的方法,而Activity和Service都继承了这个类,所有Activity和Service都可以执行发送广播的功能。

      1、BroadcastReceiver的注册方式分为静态注册和动态注册。动态注册的Receiver可以随时注册(registerReceiver)和注销(unregisterReceiver)

      • 静态注册 
        • 定义自己的Receiver(MyReceiver)
        • 在Manifest中添加receiver标签
        • 在Activity或Service中sendBroadcast等方法发送广播
      • 动态注册
        • 定义自己的Receiver(MyReceiver)
        • 在Activity或Service中使用registerReceiver注册广播。声明IntentFilter对象,对receiver进行说明,相当于Manifest文件中对应的intent-filter标签
        • 在Activity或Service中sendBroadcast等方法发送广播

      2、广播方式

      • 一般广播(sendBroadcast)
        • 广播一经发出,所有接收这种action的广播都会接收到,没有办法终止。
      • 有序广播(sendOrderedBroadcast)
        • 广播发出后,会按照Receiver优先级的高低先后调用。先被调用的Receiver可以增加自己的信息传递给后面的Receiver,也可以中断Receiver的继续传递(使用abortBroadcast)。

       

        sendStickyBroadcast和sendStickyOrderedBroadcast,与其对应的sendBroadcast和sendOrderedBroadcast相似。只是,使用sticky发送的广播会驻留在系统中,等待Receiver接收。即可以先发送广播,后注册接收器。使用removeStickyBroadcast移除。

      3、安全方面的考虑

      • 在定义对应的action时,加上包名。这样既可以起到保护broadcastReceiver的作用,也可以避免和其他人定义的action冲突
      • 在注册(registerReceiver(BroadcastReceiver,IntentFilter))的时候,可以增加权限,使没有权限的广播不会传递到自己的broadcastReceiver中
      • 如果想要禁止任何其他app发送的广播到达自己的broadcastReceiver,可以在Manifest文件中设置:android:exported="false"
      • 在调用sendBroadcast时(从 ICE_CREAM_SANDWICH版本开始),可以指定将要把广播发送到哪个包中。使用Intent.setPackage()
      • 以上注册和发送的方式都是使用Context类对应的方法,可以使用LocalBroadcastManager来注册和发送广播
        • 如果确定不会将广播发送到其他app中,可以使用LocalBroadcastManager对象对应的sendBroadcast方法
        • 如果确定不会接收其他app发送的广播,可以使用LocalBroadcastManager对象对应的registerReceiver方法

        

        LocalBroadcastManager的特点:

      • 发送的广播只会在自己的app中传播,可以确保隐私数据不会被泄露
      • 别的app发送的广播不会传递到本BroadcastReceiver中,其他的app没有办法破坏本app的数据
      • 效率更高
  • 相关阅读:
    java7-4 继承的练习
    java7-3 继承
    cocos2d-x之计时器初试
    cocos2d-x之物理按键初试
    cocos2d-x之加速度传感器初试
    cocos2d-x之多点触碰初试
    cocos2d-x之事件传递
    cocos2d-x之单点触碰初试
    cocos2d-x之value
    cocos2d-x之Vector与map
  • 原文地址:https://www.cnblogs.com/huanyou/p/5072691.html
Copyright © 2011-2022 走看看