顺序广播和无序广播

普通广播(Normal Broadcast):

一,优缺点:和有序广播的优缺点相反!

二,发送广播的方法:sendBroadcast()

有序广播(Ordered Broadcast):

一,优缺点

优点:1,按优先级的不同,优先Receiver可对数据进行处理,并传给下一个Receiver

             2,通过abortBroadcast可终止广播的传播  

缺点:效率低  

二,发送广播的方法:sendOrderedBroadcast()   

三,优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,

下一个Receiver 通过 Bundle bundle=getResultExtras(true)方法获取上一个 Receiver传来的数据     

程序效果:点击按钮,两个Receiver接收同一条广播,在logcat中打印出数据(按照Receiver的优先顺序,Receiver2先,Receiver1后)

Manifest

 <?xml version="1.0" encoding="utf-8"?> 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  package="com.song" 
  android:versionCode="1" 
  android:versionName="1.0" > 
  
  <uses-sdk android:minSdkVersion="8" /> 
  
  <application 
  android:icon="@drawable/ic_launcher" 
  android:label="@string/app_name" > 
  <activity 
  android:label="@string/app_name" 
  android:name=".C48_BroadcastActivity" > 
  <intent-filter > 
  <action android:name="android.intent.action.MAIN" /> 
  
  <category android:name="android.intent.category.LAUNCHER" /> 
  </intent-filter> 
  <!--优先级的设定 MyReceiver2大于MyReceiver1,优先级的范围-1000~1000 --> 
  </activity> 
  <receiver android:name=".MyReceiver1"> 
  <intent-filter android:priority="200"> 
  <action android:name="com.song.123"/> 
  </intent-filter> 
  </receiver> 
  <receiver android:name=".MyReceiver2"> 
  <intent-filter android:priority="1000"> 
  <action android:name="com.song.123"/> 
  </intent-filter> 
  </receiver> 
  </application> 
  
 </manifest> 

主Activity

 package com.song;  
 //发送广播,bundle绑上key为a的数据 
 import android.app.Activity;  
 import android.content.Intent;  
 import android.os.Bundle;  
 import android.view.View;  
 import android.view.View.OnClickListener;  
 import android.widget.Button;  
  
 public class C48_BroadcastActivity extends Activity {  
  /** Called when the activity is first created. */ 
     Button button;  
  @Override 
  public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(savedInstanceState);  
         setContentView(R.layout.main);  
         button=(Button)findViewById(R.id.button);  
         button.setOnClickListener(new OnClickListener() {  
  
  @Override 
  public void onClick(View v) {  
  // TODO Auto-generated method stub 
                 Intent intent=new Intent("com.song.123");  
                 Bundle bundle=new Bundle();  
                 bundle.putString("a", "aaa");  
                 intent.putExtras(bundle);  
  //有序广播 
                 sendOrderedBroadcast(intent, null);  
             }  
         });  
  
     }  
 }  

Receiver2

 package com.song;  
 //优先接到广播,bundle绑上key为b的数据 
 import android.content.BroadcastReceiver;  
 import android.content.Context;  
 import android.content.Intent;  
 import android.os.Bundle;  
  
 public class MyReceiver2 extends BroadcastReceiver{  
  
  @Override 
  public void onReceive(Context context, Intent intent) {  
  // TODO Auto-generated method stub 
         System.out.println("receiver2");  
 //      context.getSystemService(name); 
         Bundle bundle=intent.getExtras();  
         bundle.putString("b", "bbb");  
         System.out.println("a="+bundle.get("a"));  
         setResultExtras(bundle);  
  //切断广播 
 //      abortBroadcast(); 
     }  
  
 }  

Receiver1

 package com.song;  
 //接收从receiver2传来的广播,包含key为a和b的数据 
 import android.content.BroadcastReceiver;  
 import android.content.Context;  
 import android.content.Intent;  
 import android.os.Bundle;  
  
 public class MyReceiver1 extends BroadcastReceiver{  
  
  @Override 
  public void onReceive(Context context, Intent intent) {  
  // TODO Auto-generated method stub 
         System.out.println("receiver1");  
  //要不要接受上一个广播接收器receiver2传来的的数据 
         Bundle bundle=getResultExtras(true);  
         System.out.println("a="+bundle.getString("a")+",b="+bundle.getString("b"));  
     }  
  
 }  

程序效果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

笔记39 | 数据存储之SharedPreferences的介绍及使用

15440
来自专栏java初学

android入门 — ListView点击事件

36590
来自专栏Android学习之路

ViewPager 获取当前显示的Fragment

18780
来自专栏知识分享

android客服端+eps8266+单片机+路由器之远程控制系统

用android客服端+eps8266+单片机+路由器做了一个远程控制的系统,因为自己是在实验室里,所以把实验室的门,灯做成了远程控制的。 控制距离有多远---...

76060
来自专栏Android先生

Android DataBinding & MVVM

先说说两者的关系,DataBinding是一个实现数据和UI绑定的框架,而MVVM是一种架构模式,实现MVVM模式需要借助DataBinding来完成。

13410
来自专栏Vamei实验室

安卓第六夜 凡高的自画像

在上一讲中,我已经制作了一个简单的Android应用。项目的主要文件包括: MainActivity.java activity_main.xml 在这一讲,我...

21770
来自专栏Android常用基础

MVC、MVP、MVVM的理解与使用

对于MVC、MVP、MVVM,这都是Android开发的一种架构,随着日积月累的开发,很对人对这几种模式是再熟悉不过了。不过当初我在学习的时候是因为看一个开源项...

9610
来自专栏Android点滴积累

Android Toast cancel和show 不踩中不会知道的坑

说到Android Toast,几乎都很熟悉吧,下面讲讲怎么实现下面几种场景: 1、连续点击一个按钮,每次都产生一个新的Toast并且调用show方法 问题:...

36960
来自专栏林冠宏的技术文章

为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区

开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的。 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: ...

22670
来自专栏james大数据架构

Android中BroadcastReceiver广播

BroadCastReceiver 简介 广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用...

22850

扫码关注云+社区

领取腾讯云代金券