zoukankan      html  css  js  c++  java
  • 广播Broadcast Receiver

    广播的类型:

    1、标准广播(Normal broadcat)

      完全异步执行的广播,所有广播接收器同一时间接收广播消息。

      效率高,但无法被截断。

    2、有序广播

      同步执行的广播,同一时刻只能有一个广播接收器接收广播消息,当执行完毕后才会继续传递。

      优先级高的先收到广播,并且可以截断广播。

    接收系统广播:

      注册:动态注册(代码)和静态注册(AndroidaManifest.xml)

    动态广播:

      1、继承Broadcastreceiver

      2、重写onReceive()方法

      3、注册registerReceiver()

      4、动态注册的广播接收器一定要取消注册,unregisterReceiver()

      5、声明权限在AndroidManifest.xml中

    静态广播接收器在AndroidManifest.xml中通过<receiver>标签进行注册,

    <receiver android:name=".BootCompleteReceiver ">
      <intetn-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED">   //开机广播
      </intent-filter>
    </recevier>

      广播接收器中不允许开启线程,不要添加过多逻辑或进行任何耗时操作。

    自定义广播:

      1、标准广播:

      (1)定义一个广播接收器

      (2)在事件里加入自定义广播的逻辑

      (3)构建Intent对象,传入要发送的广播的值

      (4)调用sendBroadcast()方法,发送广播

      (5)在AndroidManifest.xml中<receiver>注册

      2、有序广播:

      基本与标准广播一样,发送调用sendOrderedBroadcast()方法。

      在AndroidManifest.xml中设置优先级<intent-filter android:priority="100">

      截断广播调用abortBroadcast()方法

    本地广播:(解决安全性问题)

      使用LocalBroadcastManager对广播进行管理。

      (1)通过LocalBroadcastManager.getInstance(this)获取他的实例

      (2)构建LocalReceiver类

      (3)通过LocalBroadcastManager的registerReceiver()方法进行动态注册。方法中包含2个参数localReceiver和intentfilter

      (4)调用LocalBroadcastManager的sendBroadcast()方法进行发送广播

      (5)在onDestroy()方法中取消注册

      本地广播无法使用静态注册的方式来接收。

  • 相关阅读:
    #419 Div2 Problem B Karen and Coffee (统计区间重叠部分 && 前缀和)
    #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)
    FZU 2203 单纵大法好 (二分 && 贪心)
    51Nod 1413 权势二进制 (思维)
    51Nod 1433 0和5 (数论 && 被9整除数的特点)
    POJ 2492 A Bug's Life (带权并查集 && 向量偏移)
    POJ 1456 Supermarket (贪心 && 并查集优化)
    POJ 1182 食物链 (带权并查集 && 向量偏移)
    #417 Div2 Problem B Sagheer, the Hausmeister (DFS && 枚举)
    #417 Div2 Problem C Sagheer and Nubian Market (二分 && std::accumulate)
  • 原文地址:https://www.cnblogs.com/yl-saber/p/6062346.html
Copyright © 2011-2022 走看看