前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >顺序广播和无序广播

顺序广播和无序广播

作者头像
xiangzhihong
发布2018-02-01 11:39:25
1.8K0
发布2018-02-01 11:39:25
举报
文章被收录于专栏:向治洪向治洪向治洪

普通广播(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"));  
     }  
  
 }  

程序效果

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-01-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档