zoukankan      html  css  js  c++  java
  • BroadCastReceiver的注册

    作为四大组件之一的Receiver,相信大家都不陌生,但是关于它的注册依旧是一个值得关注的问题。

    在安卓系统中差不多每时每刻都在传递着广播消息,如说 电量广播,锁屏广播,短信广播,sdcard卡状态广播,开机广播等,作为一个安卓应用开发者,有时需要接受这些广播信息来进行数据处理,比如说,做一个骚扰短信拦截器,就需要在接受短信广播,并进行内容的判断,如果判断为垃圾短信就将这条短信取消掉。想要接受这些广播消息就需要定义一个BroadcastReceiver对象,并注册好这个广播对象的监听的是哪种类型的广播,关键来了,该怎么注册?

     安卓系统提供了两种注册机制:

      1. 第一种就是静态注册,也就是说在Mainfest.xml文件(清单文件)中注册,如:

    <receiver android:name=".MyReceiver">
    <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
    </intent-filter>
    </receiver>
    这样直接在清单文件中注册,作用的效果: 一旦应用被前台显示过这个Receiver将被永久被注册(除了卸载以外),开机状态下一直会监听某种广播,这样的注册是不太被推荐的。假想有这样一种情况,需要开发一个通过短信聊天的应用,可想而知,我们需要将这个应用的广播接收优先级设置在系统收信箱之上,在系统收信箱接收到短信前,本应用先接收到这个短信,然后把这个短信给屏蔽掉,所以我们需要注册一个BroadcastReceiver对象,如采用这个静态方式注册的话,这个BroadcaseReceiver将持续生效,故在短信聊天应用退出后,这个接受者依旧活跃着,这就会导致系统收信箱接收不到短信,这个设计就存在着很大的缺陷。  


    2.第二种就是动态注册,也就是通过代码进行注册,这样意味着可以通过代码进行取消注册,如:
      registerReceiver(new MyReceiver,intentfliter); ------注册
      unregisterReceiver(new MyReceiver,intentfliter);------取消注册
  • 相关阅读:
    CF div2 332 A
    vector resize 错误用法
    linux命令之 chown
    dlmalloc 编译 链接
    C++ 类 访问限制
    C++ 编译多态 运行多态
    libevent 编译 Windows
    浮点数小记
    NYOJ 435 棋盘覆盖(二)
    HDU 3555 Bomb 简单数位DP
  • 原文地址:https://www.cnblogs.com/android-er/p/5358634.html
Copyright © 2011-2022 走看看