android有序广播
普通广播(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后)
<?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>
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); } }); } }
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(); } }
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")); } }
相关推荐
chenjinlong 2020-04-06
xilove0 2020-01-14
magic00 2020-01-10
xilove0 2019-12-09
ThedakeLaugh 2010-08-23
fuzhangandroid 2011-04-07
老菜鸟自习室 2011-08-05
StarkHuang 2014-09-04
mingming 2015-01-13
taiyuanwuyin 2015-03-31
易辰Android 2012-05-08
Alexlee 2018-04-20
OliverLau 2019-06-29
Alexlee 2018-04-20