普通广播
- 优缺点:和有序广播的优缺点相反!
- 发送广播的方法:sendBroadcast()
有序广播
- 优缺点
优点:1,按优先级的不同,优先Receiver可对数据进行处理,并传给下一个Receiver
2,通过abortBroadcast可终止广播的传播
缺点:效率低
- 发送广播的方法:sendOrderedBroadcast()
- 优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,下一个Receiver 通过 Bundle bundle=getResultExtras(true)方法获取上一个 Receiver传来的数据。
工程
MainActivity.java是程序住进口。
MyBroadcastReceiver.java等都是广播接收者,只是等级不一样。
FinalRecevier.java是有序广播的时候,即使广播被拦截了,这个还是可以接收到广播的。
<receiver android:name=".MyBroadcastReceiver"> <intent-filter android:priority="1000"> <action android:name="com.yydcdut.nima"/> </intent-filter> </receiver> <receiver android:name=".MyBroadcastReceiver2"> <intent-filter android:priority="100"> <action android:name="com.yydcdut.nima"/> </intent-filter> </receiver> <receiver android:name=".MyBroadcastReceiver3"> <intent-filter android:priority="10"> <action android:name="com.yydcdut.nima"/> </intent-filter> </receiver> <receiver android:name=".FinalRecevier"> <intent-filter> <action android:name="com.yydcdut.nima"/> </intent-filter> </receiver>
在MyBroadcastReceiver.java中,代码都差不多:
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("MyBroadcastReceiver1111111接受到的广播"); Toast.makeText(context, "MyBroadcastReceiver", Toast.LENGTH_SHORT).show(); } }
在MainActivity.java中:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View view) { Intent intent = new Intent(); intent.setAction("com.yydcdut.nima"); //无序广播 sendBroadcast(intent); //有序广播 //sendOrderedBroadcast(intent, null); //sendOrderedBroadcast(intent, null, new FinalRecevier(), null, 0, null, null); } }
在某个广播接收的类中加入
abortBroadcast();
这是去拦截广播,但是FinalRecevier还是接收到了的,无论怎么拦截广播。
我是天王盖地虎的分割线
源代码:http://pan.baidu.com/s/1dD1Qx01
广播发送.zip
转载请注明出处:http://www.cnblogs.com/yydcdut
Android -- 发送Broadcast、有序无序