zoukankan      html  css  js  c++  java
  • Android Broadcast Receive

    Broadcast Receive

      广播接收(Broadcast Receive)为android的四大组件之一。主要用于监听广播消息,并做出响应。与应用程序中监听事件相比而言,该监听事件为全局监听。

      Broadcast Receive分为两个部分,一个用于发送广播,一个用于接收广播。而发送广播的方式有两种,一种为发送普通广播,一种为发送有序广播。

    广播使用步骤:

    1.      在intent中写入发送的action。

    2.      发送者通过sendBroadcast(intent)和sendOrderedBroadcast(intent, receiverPermission)两种方式进行发送。

    3.      接受者继承BroadcastReceiver,并在onReceive方法中接收广播。

    广播发送形式:

    普通广播:

    1.      该发送方式为异步发送,接受者几乎同一时刻接收。

    2.      若无找到该广播接收者,应用不会发生异常。

    3.      可通过intent进行信息传递。

    4.      接收者未启动状态下,可接收广播,并在后台中启动该应用。

    Intent intent = new Intent();
    intent.setAction("com.mzzhang.broadcastsend.Normal");
    intent.putExtra("message", "this is a normal broadcast");
    sendBroadcast(intent);

    通过定义Intent意图,并添加Action,最后通过intent进行信息传递。

    而广播接收者继承broadcastReceiver会在onReceive中接收到广播发送的信息。

    有序广播:

    1.  通过接收者在AndroidManifest.xml中设置接收优先级Priority或在代码中动态设置setPriority。优先级范围-1000到1000,数值越大,优先级越高。

    2.  可在发送广播中将广播进行中断,而后面的接收者将无法接收到广播通知。

    3.  也可在优先级高的广播中添加信息,并传递给下个接收者。

    4.  接收者在未启动广播情况下,会自动接收广播,并在后台启动该应用。

    Intent intent = new Intent();
    intent.setAction("com.mzzhang.broadcastsend.ordered");
    intent.putExtra("message", "this is a ordered broadcast");
    sendOrderedBroadcast(intent, null);

    该启动方式与普通广播方式一致。区别在于sendOrderedBroadcast。

    广播接收:

    1.  广播接收继承BroadcaseReceive,并在onReceive中接收该广播。

    2.  onReceive为主线程,若在onReceive中响应时间过长会照常ANR。

    3.  若需要长时间操作可通过广播发送一个命令启动Servie。

    4.  监听方式可分为动态监听和静态接听方式。

    静态监听注册方式:

    <receiver android:name="com.mzzhang.broadcastsend.ReceiveNormal">
    <intent-filter android:priority="50">
           <action android:name="com.mzzhang.broadcastsend.Normal"/>
           <action android:name="com.mzzhang.broadcastsend.ordered"/>
    </intent-filter>
    </receiver>

    其中android:priority为优先级时使用

    动态监听注册方式:

       IntentFilter filter=new IntentFilter("com.mzzhang.broadcastsend.ordered");
       filter.setPriority(100);
       ReceiveTwo receiver = new ReceiveTwo();
       registerReceiver(receiver, filter);

    在onReceive接收,并添加信息。

      Bundle extras = new Bundle();
      extras.putString("message", message.toString());
      setResultExtras(extras);

    在下个优先级中接收,并获取上个结果信息。

    Bundle bundle = getResultExtras(true);
    结束往下传递:abortBroadcast();
  • 相关阅读:
    对象的实例化内存布局与访问定位
    方法区

    虚拟机栈
    运行时数据区
    类加载子系统
    JVM和Java体系架构
    JUnit概述
    HTML5CSS3_day03
    HTML5CSS3_day01
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9207328.html
Copyright © 2011-2022 走看看