android 广播简介

原创 2015年07月08日 23:00:39

无序广播

特点:执行效率较高,发出去后能被不同应用 不同的广播接受者接受,不安全。

广播发送方式:

sendBroadcast(mIntent);//无序
广播接受者按生命周期分为动态注册的广播和静态注册的广播。

动态广播接受者注册:

动态注册的广播随着注册时的Context对象的销毁而销毁。也可以主动注销掉动态注册的广播接受者。

1.创建过滤器

IntentFilter filter = new IntentFilter();
        filter.addAction(LOCAL_ACTION);
2.创建广播接受者

BroadcastReceiver mReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (LOCAL_ACTION.equals(intent.getAction())) {
            
            }
        }
    };
3.注册动态广播

 registerReceiver(mReceiver, filter);
4.注销广播

 @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mReceiver);
    }


静态广播

只要设备开启,广播接受者就是打开的,不用担心广播接受者被挂掉。
1.继承实现BroadcastReceiver

public class LocalBroadReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (LOCAL_ACTION.equals(intent.getAction())) {
        }
    }
}
2.在清单中注册广播

  <receiver android:name="com.example.androiddemo.LocalBroadReceiver" >
              <intent-filter >
                <action android:name="com.test.localbroad" />
            </intent-filter>
        </receiver>


有序广播

特点:执行效率较低,发出的广播按照优先级的高低,从高到底依次传递,可以在传递的过程中消耗掉该广播不让较低优先级的广播接受者接受到该广播。

有序广播跟无序广播使用上最大的不同是,要为注册的广播接受者设置一个优先级。其他部分流程类似。

广播发送方式:

sendOrderedBroadcast(mIntent, null);

设置优先级

1.动态注册的广播接受者

IntentFilter filter = new IntentFilter();
        filter.addAction(LOCAL_ACTION);
        registerReceiver(mReceiver, filter);
        filter.setPriority(1000);//优先级
        registerReceiver(mReceiver, filter);
2.静态注册的广播接受者
  <receiver android:name="com.example.androiddemo.LocalBroadReceiver" >
              <intent-filter android:priority="500">
                <action android:name="com.test.localbroad" />
            </intent-filter>
        </receiver>


第一次接收到广播获取接收到的参数
使用 abortBroadcast();可以可以消耗掉该广播,不让广播继续向下传送。

Bundle bundle=intent.getExtras();
setResultExtras(bundle); 
接受上一层广播接受者分发的参数

//是否接受上一个广播接收器传来的的数据  
Bundle bundle=getResultExtras(true);  

在Android系统中,BroadcastReceiver的设计初衷就是从全局考虑的,可以方便应用程序和系统、应用程序之间、应用程序内的通信,所以对单个应用程序而言BroadcastReceiver是存在安全性问题的,相应问题及解决如下:
1、当应用程序发送某个广播时系统会将发送的Intent与系统中所有注册的BroadcastReceiver的IntentFilter进行匹配,若匹配成功则执行相应的onReceive函数。可以通过类似sendBroadcast(Intent, String)的接口在发送广播时指定接收者必须具备的permission。或通过Intent.setPackage设置广播仅对某个程序有效。
2.  当应用程序注册了某个广播时,即便设置了IntentFilter还是会接收到来自其他应用程序的广播进行匹配判断。对于动态注册的广播可以通过类似registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)的接口指定发送者必须具备的permission,对于静态注册的广播可以通过android:exported="false"属性表示接收者对外部应用程序不可用,即不接受来自外部的广播。

其实通过LocalBroadcastManager可以很好的解决这些问题。

LocalBroadcastManager

特点:执行效率高,用来在同一个应用的不同组件间发送广播。
Android v4 兼容包提供android.support.v4.content.LocalBroadcastManager工具类,主要负责程序内部广播的注册与发送。也就是说,它只是适用代码中注册发送广播,对于在AndroidManifest中注册的广播接收,则不适用。使用它比直接通过sendBroadcast(Intent)发送系统全局广播有以下几点好处。
  • 1.因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题。
  • 2.不用担心别的应用伪造广播,造成安全隐患。
  • 3.相比在系统内发送全局广播,它更高效。
使用过程:
1.获取LocalBroadcastManager实例
LocalBroadcastManager mLocal;
        mLocal = LocalBroadcastManager.getInstance(this);
2.发送广播
mLocal.sendBroadcast(mIntent);
3.注册广播接受者
 IntentFilter filter = new IntentFilter();
        filter.addAction(LOCAL_ACTION);
        mLocal.registerReceiver(mReceiver, filter);
4.注销
mLocal.unregisterReceiver(mReceiver);


版权声明:本文为博主原创文章,未经博主允许不得转载。

android Service 总结

本篇博客聊一下Android下的Service组件,对于Service组件,有点类似于Windows下的服务。Service是Android 四大组件中与Activity最相似的组件,它们的区别在于:...

Android广播简介.zip

  • 2015年08月03日 10:28
  • 161KB
  • 下载

Android之BroadcastReceiver(一):广播机制简介

上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就会播放一条广播来告知全校的师生。类似的工作机制在计算机领域也有很广泛的应用,比如在网络通信中,一...

Android中Intent详解(二)之使用Intent广播事件及Broadcast Receiver简介

通过第一篇的讲解,我们已经看到了如何使用Intent来启动新的应用程序组件,但是实际上他们也可以使用sendBroadcast方法来在组件间匿名的广播消息。 作为一个系统级别的消息传递机制,Inten...

Android之广播机制简介一

Android之广播机制简介一 一,广播分类 Android 中的广播主要可以分为两种类型,标准广播和有序广播。 标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后...

Android广播机制 简介

类型Android中的广播主要分为两类:标准广播和有序广播。 标准广播是一种完全异步执行的广播,发出后所有广播接收器几乎同时接收到这条广播,该类型广播无法被截断。 有序广播是一种同步执行的广播,在广播...
  • bkjs626
  • bkjs626
  • 2017年04月24日 00:17
  • 135

Android-Broadcast广播事件(1)-简介及普通广播调用步骤

前言 BroadcastReceiver即广播接收器,是专门用于接受广播消息以及做出相应处理的组件。其本质就是一个全局监听器,接收程序所发出的Broadcast Intent。 但是它是没...
  • ohcezzz
  • ohcezzz
  • 2017年05月02日 22:14
  • 81

波纹广播方案简介

  • 2015年08月05日 15:53
  • 322KB
  • 下载

第16章 网际多目标广播简介.doc

  • 2011年09月02日 11:07
  • 270KB
  • 下载

android6.0 外部存储设备插拔广播以及获取路径(U盘)

这里我将U盘作为例子来说明解析。android4.1版本时U盘插拔时的广播在android4.1时我们可以用以下的BroadcastReceiver接收U盘广播。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 广播简介
举报原因:
原因补充:

(最多只允许输入30个字)