zoukankan      html  css  js  c++  java
  • 四大组件之---BroadcastReceiver 广播接收器

    前言

    为了方便Android系统各个应用程序及程序内部进行通信,Android系统引入了一套广播机制。各 个应用程序可以对感兴趣的广播进行注册,当系统或者其他程序发出这条广播的时候,对发出的广 播进行注册的程序便能够收到这条广播。为此,Android系统中有一套完整的API,允许程序只有 的发送和接受广播。

    广播类型

    标准广播(Normal Broadcasts)

    是一种完全异步执行的广播,在广播发出之后,所有的广播接收器会在同一时间接收到这条广
    播,广播无法被截断.
    发送方式:
    Intent intent=new Intent("com.example.dimple.BROADCAST_TEST");
    sendBroadcast(intent);
    

    有序广播(Ordered Broadcasts)

    是一种同步执行的广播,在广播发出之后,优先级高的广播接收器可以优先接收到这条广播,
    并可以在优先级较低的广播接收器之前截断停止发送这条广播。
    发送方式:
    Intent intent=new Intent("com.example.dimple.BROADCAST_TEST");
    sendOrderBroadcast(intent,null);//第二个参数是与权限相关的字符串。
    

    注册广播

    在Android的广播接收机制中,如果需要接收广播,就需要创建广播接收器。而创建广播接收器的
    方法就是新建一个类(可以是单独新建类,也可以是内部类(public)) 继承自
    BroadcastReceiver
    class myBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
    //不要在广播里添加过多逻辑或者进行任何耗时操作,因为在广播中是不允许开辟
    线程的, 当onReceiver( )方法运行较长时间(超过10秒)还没有结束的话,那么程序会报错
    (ANR), 广播更多的时候扮演的是一个打开其他组件的角色,比如启动Service,Notification
    提示, Activity等!
    }
    }
    

    动态注册和静态注册的区别

    1、动态注册的广播接收器可以自由的控制注册和取消,有很大的灵活性。但是只能在程序启动之后才 能收到广播,此外,不知道你注意到了没,广播接收器的注销是在onDestroy()方法中的。所以广 播接收器的生命周期是和当前活动的生命周期一样。

    2、静态注册的广播不受程序是否启动的约束,当应用程序关闭之后,还是可以接收到广播。

    两种方式注册广播:  

    1、动态注册

    所谓动态注册是指在代码中注册。步骤如下 :
    - 实例化自定义的广播接收器。
    - 创建IntentFilter实例。
    - 调用IntentFilter实例的addAction()方法添加监听的广播类型。
    - 最后调用Context的registerReceiver(BroadcastReceiver,IntentFilter)动
    态的注册广播。
    PS:这里提醒一点,如果需要接收系统的广播(比如电量变化,网络变化等等),别忘记在
    AndroidManifest配置文件中加上权限。
    另外,动态注册的广播在活动结束的时候需要取消注册:
    @Override
    protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(myBroadcastReceiver);
    }
    

    2、静态注册

    <receiver
    android:name="com.ttit.core.broadcastreceiver.MyBRReceiver2">
    <intent-filter>
    <action
    android:name="com.example.broadcasttest.MY_BROADCAST" />
    </intent-filter>
    </receiver>
    

      

  • 相关阅读:
    MySQL存储过程参数【4】
    MySQL存储过程的变量【3】
    MySQL存储过程入门【2】
    MySQL存储过程简介【1】
    MySQL删除重复行的方式
    在MySQL单个表中找到重复的值
    MySQL比较两个表不同的数据
    【思维】P5743 【深基7.习8】猴子吃桃——有趣的解法,归纳推导
    对判断质数的算法的优化
    【思维】P1321 单词覆盖还原
  • 原文地址:https://www.cnblogs.com/ljstudy/p/14586044.html
Copyright © 2011-2022 走看看