美文网首页
Android详解广播

Android详解广播

作者: 雁度寒崖 | 来源:发表于2019-09-28 17:24 被阅读0次

广播分两类:

▲标准广播:完全异步执行的广播!!!几乎所有的广播接收器都会同时接收到这条广播消息,没有先后顺序可言。
优点:效率高;
缺点:无法被截断。
▲有序广播:同步执行的广播!!!广播发出后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器逻辑处理完了,才会继续传递广播。所以他是分先后顺序的,优先级高的接收器会先收到广播。
优点:可截断,后面的广播接收器就收不到广播了;
缺点:效率低,一个一个处理。

例如:

开机后:系统会在执行finishBooting函数时发送一条广播,值为android.intent.action.BOOT_COMPLETED的广播。

自己发送和接收广播:

标准广播:

▲发送标准广播:其实很简单,只需要初始化一个Intent,然后sendBroadcast就行了

Intent intent = new Intent("com.czb.broadcast_test.MY_BROADCAST");
sendBroadcast(Intent);

▲想要接收自己发的广播也很简单:
新建一个BroadcastReceiver,
继承BroadcastReceiver并重写onReceive(Context var1, Intent)
在Manifest里面加<intent-fliter>表明想接收的广播的值

<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.czb.broadcast_test.MY_BROADCAST" />
            </intent-filter>
</receiver>

然后intent.getAction();就可以接收到广播的值了,intent.getExtra("msg");接收Intent里面存的数据。

有序广播:

▲发送有序广播:也很简单,改一行代码就可以:

Intent intent = new Intent("com.czb.broadcast_test.MY_BROADCAST");
sendOrderedBroadcast(Intent,null);

▲接收有序广播:其实和接收标准广播的区别不大:
1.可以识别BroadcastReceiver的优先级;
2.可以截断广播。
先在Manifest里面加一句来设置优先级
这里我设置的是最高优先级100

<intent-filter android:priority=100>
                <action android:name="com.czb.broadcast_test.MY_BROADCAST" />
</intent-filter>

然后在标准广播的接收器改一下就可以接收并截断广播了;
onReceive里面加一句abortBroadcast();就可以截断广播了

本地广播:

只能在应用程序内部发送和接收广播
这个就稍复杂一点了,需要借助LocalBroadcastManager

LocalBroadcastManager lbm = new LoadBroadcastManager.getInstance(this);
Intent intent = new Intent("com.czb.broadcast_test.MY_BROADCAST")
lbm.sendBroadcast(intent);

接收本地广播:

LocalBroadcastManager lbm = new LoadBroadcastManager.getInstance(this);
...
LocalReceiver lr = new LocalReceive();
Intentfilter intentfliter = new Intentfliter("com.czb.broadcast_test.MY_BROADCAST");
lbm.registerReceiver(lr, intentfliter);//注册本地广播监听器

class LocalReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();
        }
}

@Override
protected void onDestroy() {
        super.onDestroy();
//        unregisterReceiver(networkChangeReceiver);
        localBroadcastManager.unregisterReceiver(localReceiver);
}

这里写了一个内部类作为本地广播接收器,而且我们这次没有在Manifest里面写receiver,而是动态注册的广播接收器;
这种方法也适用于注册标准广播接收器和有序广播接收器,方法类似,不再赘述。
▲本地广播接收器的优势:
1.明确知道正在发送的广播不会离开我们的程序,因此不必担心信息泄露;
2.其他程序也没办法给我们的程序发送广播,没有安全隐患;
3.本地广播比一开始说的两种广播(系统全局广播)更加高效。

相关文章

  • Android详解广播

    广播分两类: ▲标准广播:完全异步执行的广播!!!几乎所有的广播接收器都会同时接收到这条广播消息,没有先后顺序可言...

  • 详解Android广播机制

    谨以文章记录学习历程,如有错误还请指明。 前言 我们上学时都有过这样的经历,当我们在火车站列车候车室中等待时,每当...

  • Android广播机制详解

    Android应用程序可以从Android系统和其他Android应用程序发送或接收广播消息,类似于发布-订阅设计...

  • Android广播的详解

    广播简介: 为什么说 Android 中的广播机制更加灵活呢?这是因为 Android 中的每个应用程序都可以对自...

  • 关于Broadcast Receiver的知识点

    一,广播 二,实现广播 三,广播实现机制 四,LoacalBroadcastManager详解 ...

  • Android广播

    参考:Android总结篇系列:Android广播机制Android广播机制 一. 广播 1. 广播是什么? 广播...

  • 4 BroadCast相关

    广播实现广播-receiver广播实现机制LocatBroadcastManager详解 1、广播定义 在Andr...

  • Android本地广播详解

    本地广播用途 本地广播用于同一个app内通信(是否可以多进程通信?),且其他app无法接收到本地广播的消息,可以大...

  • Android lifecycle 实战及使用进阶

    前言 Android lifecycle 使用详解 Android LiveData 使用详解 Android l...

  • MVP / RxJava / Retrofit / RxBus

    MVP Android MVP 详解(上) Android MVP 详解(下) Android中的MVP模式,带实...

网友评论

      本文标题:Android详解广播

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