美文网首页
Android - 广播

Android - 广播

作者: just0119 | 来源:发表于2019-02-22 16:40 被阅读0次

定义

- android四大组件之一,
- 一个全局监听器,用来监听接收应用发出的消息
- 分为广播接收者和广播发送者
- 一般用来进行组件间通信,以及和android系统间通信比如监听网络状态,开机状态

原理

- 使用设计模式中的观察者模式,基于消息的发布订阅模型
- 模型示意图
image.png

分类及使用流程

## 广播分类
      - 无序广播(普通广播)
      - 系统广播:需要申请对应权限,注册对应广播接收者即可
      - 有序广播
          1. 发送出去的广播按照先后顺序进行接收
          2. 通过设置priority属性值可以设置广播优先级,优先级相同,动态注册广播优先
          3. 优先级高的广播可以通过调用BroadCastReceiver的abortBroadCast()方法终止广播,后面优先级低的则无法接收广播
          4. 优先级高的广播可以通过setResultExtras(Bundle)将参数传递给优先级低的广播,低优先级的可以通过getResultExtras(true)获取参数
  
  ## 广播注册方式
      - 静态注册
          1. 直接在Androidmanifest文件中进行注册
          ```  
            <receiver android:name=".MyReceiver"
                  android:enabled="true"
                  android:exported="true">
                    <intent-filter>
                    <action android:name="CCJJQQ"/>
                  </intent-filter>
              </receiver> 
         ```
         2. receiver的属性值:
              2.1 android:enabled   能否接收其他App的发出的广播
              2.2 android:exported=["true" | "false"]  默认值是由receiver中有无intent-filter决定的:如果有intent-filter,默认值为true,否则为false
              2.3 android:permission="string" 具有相应权限的广播发送者发送的广播才能被此BroadcastReceiver所接收
              2.4 android:process="string"  BroadcastReceiver运行所处的进程,默认为app的进程,可以指定独立的进程
        
      - 动态注册
          在代码中进行注册
        ```
           MyReceiver receiver = new MyReceiver();
           IntentFilter filter = new IntentFilter();
           filter.addAction("CCJJQQ");
           registerReceiver(receiver,filter);
        ```
      - 区别:动态注册广播生命周期和activity相同,而静态注册不受启动activity的影响
    ## 广播接收
        ```
          public class MyReceiver extends BroadcastReceiver {
            @Override
             public void onReceive(Context context, Intent intent) {
                  if(Objects.equals(intent.getAction(), "CCJJQ"))
                  Toast.makeText(context,"cccq",Toast.LENGTH_SHORT).show();
                }
            }
        ```
    ## 广播发送
        - 发送普通广播  sendBroadCast(intent);
        - 发送有序广播  sendOrderBroadCast(intent);
        - 发送粘性广播  sendStickyBroadCast(intent)  可以发送给未注册的广播
        - 还有一种本地发送广播,只在本应用中发送广播,且必须动态注册
            ```      
       LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
            ```
  # 注意点
         - 广播接收在主线程,不能做耗时操作
         - 需要取消注册

[参考链接] https://www.jianshu.com/p/ca3d87a4cdf3

相关文章

  • Android广播

    参考:Android总结篇系列:Android广播机制Android广播机制 一. 广播 1. 广播是什么? 广播...

  • Android笔记——BroadcastReceiver

    1.0Android中的广播类型 Android中的广播主要可以分为两种类型:标准广播和有序广播。 标准广播(no...

  • Android动态广播的使用

    说到Android的广播,分为动态广播和静态广播两种。这篇文章主要讲解下Android的动态广播。广播的作用主要是...

  • Android体系复习---广播

    一、广播简介 Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这...

  • 浅谈Android Broadcast

    Android Broadcast Broadcast使用场景 Android广播分为两个方面:广播发送者和广播接...

  • Android 广播

    【Android 广播】 BroadcastReceiver简介 BroadcastReceiver(广播接收器)...

  • Android基础:BroadcastReceiver广播接收者

    介绍 BroadcastReceiver(广播接收器),属于 Android 四大组件之一 Android广播机制...

  • Android 发送接收广播原理

    前言 本文代码基于 Android R。 注册广播接收者 Android 可以动态和静态注册广播接收者。动态广播接...

  • Android 广播

    广播接收器 是Android的四大组件之一,可见广播在Android中的重要性; 1. 什么是广播? 广播(Bro...

  • BroadcastReceiver的使用

    Android中的广播分为标准广播(Normal broadcasts)、有序广播(Ordered broadca...

网友评论

      本文标题:Android - 广播

      本文链接:https://www.haomeiwen.com/subject/lvuhyqtx.html