首页 > 代码库 > Android -- 发送Broadcast、有序无序

Android -- 发送Broadcast、有序无序

普通广播                                                                                    

  • 优缺点:和有序广播的优缺点相反!
  • 发送广播的方法:sendBroadcast()

有序广播                                                                                  

  • 优缺点

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

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

缺点:效率低  

  • 发送广播的方法:sendOrderedBroadcast()
  • 优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,下一个Receiver 通过 Bundle bundle=getResultExtras(true)方法获取上一个 Receiver传来的数据。

工程                                                                                          

imageMainActivity.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