关于广播以前感觉是一知半解的,这次看到同事整理的文档,顺带跟着再参考几篇博文也学习整理了下,先上个整理的图

代码模板

发送广播

    public static final String RECEIVE_ACTION = "com.demo.receive_action";
public static final String RECEIVE_PERMISSION ="com.demo.receive_permission"; Intent intent = new Intent();
//设置Action
intent.setAction(RECEIVE_ACTION);
//添加附加信息
intent.putExtra("msg", "我是普通广播");
//设置指定接送广播的应用报名,可以是其它应用包名字符串,这里使用的是自己
intent.setPackage(getPackageName());
//发送广播时指定权限,这里的权限需要在使用方的manifest中通过形如
// <uses-permission android:name="com.demo.receive_permission" />进行“使用声明”
sendBroadcast(intent, RECEIVE_PERMISSION);

静态注册

    <!-- 声明权限 -->
<permission android:name="com.demo.receive_permission"/> <!--静态注册
exported默认为true,在这里指定false,只接受应用内广播-->
<receiver
android:name=".DynamicReceiver"
android:enabled="true"
android:exported="false"
android:permission="com.demo.receive_permission">
<intent-filter android:priority="100">
<action android:name="com.demo.receive_action"/>
</intent-filter>
</receiver>

动态注册

    DynamicReceiver dynamicReceiver = new DynamicReceiver();

    IntentFilter dynamicFilter = new IntentFilter();
//注册广播的Action
dynamicFilter.addAction(RECEIVE_ACTION);
//设置优先级
dynamicFilter.setPriority(100);
//注册时设置权限
registerReceiver(dynamicReceiver, dynamicFilter, RECEIVE_PERMISSION, null);

小结

消息通信在Android上可以用多种方式来实现,我觉得一般而言:

如果是同一进程内跨线程的消息通信可以优先考虑使用RxBus和EventBus等框架(单例是进程内共享内存的);

如果是同一应用内跨进程的消息通信可以优先考虑使用support v4包中的LocalBroadcastManager,当然如果是使用顺序或粘性等特殊广播,就没办法使用LocalBroadcastManager了;

如果是跨应用的消息通信才会考虑使用BroadcastReceive组件。

相关知识内容链接

Android探索之BroadcastReceiver具体使用以及安全性探究

Android BroadcastReceiver介绍

LocalBroadcastManager 的实现原理

Android 自定义权限

自启动失败原因

BroadcastReceiver的原理和使用里面有些注意事项讲的比较细,比如动态注册比静态注册优先级要高,onReceive函数原则不能超过10秒,否则会有ANR,

android 广播的更多相关文章

  1. Android随笔之——Android广播机制Broadcast详解

    在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...

  2. Android广播机制的深入学习

    部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...

  3. Android总结篇系列:Android广播机制

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  4. Android广播机制概述

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  5. Android广播机制:Broadcast

    转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...

  6. Android(java)学习笔记172:BroadcastReceiver之 Android广播机制

    Android广播机制 android系统中有各式各样的广播,各种广播在Android系统中运行,当"系统/应用"程序运行时便会向Android注册各种广播.Android接收到广 ...

  7. Android广播机制(转)

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  8. Android广播的发送与接收

    Android广播的发送与接收 效果图 广播发送 广播分为有序广播和无序广播 有序广播与无序广播的区别 无序广播:只要是广播接收者指定了接收的事件类型,就可以接收到发送出来的广播消息.不能修改消息. ...

  9. Android广播机制

    原文出处: Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的 ...

  10. 【Android】Android 广播大全

    [Android]Android 广播大全 String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式. String ALL_APPS_ACTION 动作:列举所有可用的应 ...

随机推荐

  1. xss跨站实例总结

    跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私.钓鱼欺骗.偷取密码.传播恶意代码等攻击行为. 恶意的攻击者将对客户端有危害的代码放到服务器 ...

  2. mysql delete删除记录数据库空间不减少问题解决方法

    记得在中学时学计算机时老师就告诉我delete删除记录只是给数据库中的记录加一个删除标识了,这样数据库空间并不是减少了,当时没想这么多,昨天发现一个数据库利用delete 删除之后容量没变,后来百度了 ...

  3. 标准库errno.h 查看错误代码编号,errno:4 与error:2

    log 里报错,errno:4   与errno:2 查了一下 errno.h   --------下文来自百度百科 errno 编辑 errno 是记录系统的最后一次错误代码.代码是一个int型的值 ...

  4. HttpWebRequest后台读取网页类

    using System;using System.Linq;using System.Collections.Generic;using System.Web;using System.Config ...

  5. DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求

    转载:http://blog.csdn.net/zssureqh/article/details/39213817 背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间w ...

  6. users

    NAME users - print the user names of users currently logged in to the current host SYNOPSIS users [O ...

  7. petri网学习心得

    本文转载自duxw,如给您带来不便之处,请联系博主. 1.Petri网书籍:<petri网导论>,吴哲辉 非常适合初学者.概念清晰,容易理解. 2.工作流书籍:<Workflow M ...

  8. 如何分割一个utf8字符串(保证单个汉字的完整性)

    std::list<std::string> split_utf8_string(const std::string& text) { std::list<std::stri ...

  9. Android runProguard配置 导致module lib 中的包编译时无法识别

    今天写代码时用到了另一个lib型的工程,把它添加到dependencies后,在原工程中可以引用lib中的文件了,但是编译时就会报错,提示包不存在,后来在build.gradle中设置runProgu ...

  10. Java面向对象的继承

    继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...