Broadcast被分成两种:

1.Normal Broastcast(普通广播)

    Normal Broadcast是完全异步的,可以在同一时刻(逻辑上)被所有接收者收到,消息传递的效率比较高。但缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。

 

2.Ordered Broadcast(有序广播)

    Ordered Broadcast的接收者将按预先声明的优先级依次接收Broadcast。如:A的级别高于BB的级别高于C。那么,Broadcast先传给A,再传给B,最后传给C。优先级声明在元素的android:priority属性中,数越大优先级别越高,取值范围为-1000~1000,优先级也可以调用IntentFilter对象的setPriority()进行设置。Ordered Broadcast接收者可以终止Broadcast Intent的传播,Broadcast Intent的传播一旦终止,后面的接收者就无法接收到Broadcast。另外,Ordered Broadcast的接收者可以将数据传递给下一个接收者,如:A得到Broadcast后,可以往它的结果对象中存入数据,当Broadcast传给B时,如:A得到Broadcast后,可以往它的结果对象中存入数据,当Broadcast传给B时,B可以从A的结果对象中得到A存入的数据。

 

    Context提供的如下两个方法用于发送广播。

    1.sendBroadcast():发送Normal Broadcast

    2.sendOrderedBroadcast():发送Ordered Broadcast

 

    对于Ordered Broadcast而言,系统会根据接收者声明的优先级按顺序逐个执行接收,优先接收到Broadcast的接收者可以终止Broadcast,调用BroadcastReceiverabortBroadcast()方法即可终止Broadcast。如果Broadcast被前面的接收者终止,后面的接收者就再也无法接收到Broadcast了。

 不仅如此,对于Ordered来说,优先接收到Broadcast的接收者可以通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,然后传给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true)可以获取上一个接收者存入的数据。


/********************************************************/


下面是一个实例:

工程结构:



全部代码:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                

main.xml

<?xml version="1.0" encoding="utf-8"?>    

MainActivity.java

package com.example.leidong.sortedbroadcast;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;/** * Created by leidong on 2016/9/6. */public class MainActivity extends AppCompatActivity {    Button sendButton;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        sendButton = (Button)findViewById(R.id.sendButton);        sendButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent();                intent.setAction("com.example.leidong.action.OrderedBroadcast");                intent.putExtra("msg","HaHaHaHaHa!!!");                sendOrderedBroadcast(intent, null);            }        });    }}

MyReceiver1.java

package com.example.leidong.sortedbroadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;/** * Created by leidong on 2016/9/6. */public class MyReceiver1 extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,                "接收到的Intent的Action为:" + intent.getAction() + "\n 消息内容是:" + intent.getStringExtra("msg"),                Toast.LENGTH_LONG).show();        //创建一个Bundle对象并存入数据        Bundle bundle = new Bundle();        bundle.putString("first", "LaLaLaLa!!!");        //将Bundle放入结果中        setResultExtras(bundle);    }}


MyReceiver2.java

package com.example.leidong.sortedbroadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;/** * Created by leidong on 2016/9/6. */public class MyReceiver2 extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Bundle bundle = getResultExtras(true);        //解析前一个BroadcastReceiver所存入的key为first的消息        String first = bundle.getString("first");        System.out.println(first);        Toast.makeText(context,                "我是第二个BroadcastReceiver,我收到的消息是:" + first,                Toast.LENGTH_LONG).show();    }}
/************************************************************/

 AVD运行:

点击SEND按钮后:


等待几秒后:


    

 

更多相关文章

  1. Android(安卓)Studio 使用jdbc远程连接阿里云主机web数据库(逃坑)
  2. Android(Xamarin)之旅(五)
  3. Android(安卓)数据存储(一) Preference的使用
  4. Android数据库SQLite性能优化技巧
  5. android-pull方式解析xml文件以及XML文件的序列化
  6. Android+Jquery Mobile学习系列(5)-SQLite数据库
  7. Android菜鸟笔记3-Activity切换
  8. Android移动终端数据同步技术的一次了解
  9. Android(安卓)Spinner

随机推荐

  1. App 启动页出现短暂闪屏的解决方案
  2. Android(安卓)中设计模式
  3. Android基础入门教程——2.2.1 LinearLay
  4. Android中短信的读取与拦截
  5. android button light 流程分析(三) — f
  6. Android里解析AndroidManifest.xml的java
  7. Fastboot使用详解
  8. Android - Intent基础
  9. 关于Android中的数据存储
  10. Activity横竖屏切换时的UI处理