美文网首页
广播分类

广播分类

作者: yanghanbin_it | 来源:发表于2017-06-08 14:59 被阅读0次

广播分为有序广播和无序广播

  • 有序广播
    所有与广播中的action匹配的广播接收者都可以收到这条广播,但是是有先后顺序的,按照广播接收者的优先级排序.
  • 无序广播
    所有与广播中的action匹配的广播接收者都可以收到这条广播,并且是没有先后顺序的,视为同时收到
有序广播
  • sendOrderedBroadcast发送
  • 可以添加最终广播接收者,最终广播接收者resultReceiver:不需要在清单文件中配置,这个广播接收者只接收该条有序广播,并且是最后一个收到该广播,并且一定可以接收到,即便被拦截
发出广播
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v) {
        Intent intent = new Intent();
        intent.setAction("orderlyBroadcast");

        //发送有序广播
        //sendOrderedBroadcast(intent, null, null, null, 0, "每人发100W", null);

        //最终广播接收者resultReceiver:不需要在清单文件中配置,这个广播接收者只接收该条有序广播,并且是最后一个收到该广播,并且一定可以接收到,即便被拦截
        sendOrderedBroadcast(intent, null, new MyResultReceiver(), null, 0, "每人发100W", null);
    }

    class MyResultReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String str = getResultData();
            System.out.println("最终结果:" + str);
        }
    }
}
接收者
  • 优先级 android:priority="300" 范围-1000 至 1000 1000为最高
  • 阻止广播 abortBroadcast(),对于最终接收者来说,无效.
<receiver
    android:name=".LevelOneReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="1000">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>

<receiver
    android:name=".LevelTwoReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="600">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>

<receiver
    android:name=".LevelThreeReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="300">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>
public class LevelOneReceiver extends BroadcastReceiver {
    public LevelOneReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL ONE:" + str);

        //修改广播内容
        setResultData("每人发80W");
    }
}
public class LevelTwoReceiver extends BroadcastReceiver {
    public LevelTwoReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL TWO:" + str);
        //阻止广播后,优先级低的则收不到了,但最终广播接收者一定会收到.
        abortBroadcast();
    }
}
public class LevelThreeReceiver extends BroadcastReceiver {
    public LevelThreeReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL THREE:" + str);
    }
}

相关文章

  • 广播分类

    广播分为有序广播和无序广播 有序广播所有与广播中的action匹配的广播接收者都可以收到这条广播,但是是有先后顺序...

  • Android广播的安全性

    广播的分类 定义分类 系统广播由Android系统内部自动发出,用户只负责接收 自定义广播由开发者自己定义的广播 ...

  • Android动态广播(Android8.0)

    Android广播事件 (1).广播注册分类 (a).动态注册 在...

  • Android Broadcast

    广播的发送:通过intent; 广播的接收:通过广播接收者(Broadcast Receiver) 广播的分类:无...

  • 《第一行代码:Android》读书笔记——第5章 Broadca

    广播机制简介 Android广播的分类: 如图所示: 发送和接收广播 发送广播:使用Intent 接收广播:Bro...

  • 2019-11-22

    一、广播分类: 二、广播涉及源文件:(待编辑) PackageManagerService 三、广播注册: 1.静...

  • 我要做 Android 之 广播

    广播的分类: 普通广播 有序广播 本地广播 粘性广播 一:普通广播 普通广播是一种完全异步执行的广播,在广播发出之...

  • <第一行代码>chapter 5 Broadcast

    BroadcastReceiver 基本分类 标准广播(normal broadcasts) 异步执行的广播,发出...

  • Android中的广播使用小结

    1.广播的分类 (1)按照发送的方式分类 标准广播是一种异步的方式来进行传播的,广播发出去之后,所有的广播接收者几...

  • Android宝典|BroadcastReceiver必考知识点

    目录 思维导图 概述 注册方式静态注册动态注册 广播分类普通广播系统广播有序广播粘性广播应用内广播 参考 思维导图...

网友评论

      本文标题:广播分类

      本文链接:https://www.haomeiwen.com/subject/prftqxtx.html