顺序广播和无序广播

    xiaoxiao2026-10-02  3

    普通广播(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

    [html]  view plain copy <?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

    [java]  view plain copy 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 [java]  view plain copy 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

    [java]  view plain copy 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"));       }      }  

    程序效果 相关资源:python入门教程(PDF版)
    最新回复(0)