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);------取消注册
  • 相关阅读:
    有关数据库锁表
    order by 排序的数字异常
    索引建议
    有关文件在浏览器中打开window.open
    vscode 常用快捷键
    jQuery中preventDefault()、stopPropagation()、return false 之间的区别
    理解Linux系统负荷(WDCP系统后台参数之一)
    JavaScript toString() 方法
    1-4:CSS3课程入门之文本新增属性
    1-3:CSS3课程入门之伪类和伪元素
  • 原文地址:https://www.cnblogs.com/android-er/p/5358634.html
Copyright © 2011-2022 走看看