1.什么是BroadcastReceiver?

本质上是属于一个监听器,但onXxxListenter只是程序级别的监听器,当程序退出时候监听器也随之关闭。而BroadcastReceiver是系统级别的监听器,只要存之匹配的intent被广播出来,BroadcastRecevier就会被激发。

2.如何使用BroadcastRecevier

原理:子类继承BroadcastReceiver,并为该子类添加intent描述,当程序发送intent的时候,intent会进行匹配搜索,当与该子类的intent描述相一致的时候,就会调用子类的onRecevie()方法

步骤一:子类继承BroadcastReceiver并重写onReceive()

  1. public class FirstBroadcast extends BroadcastReceiver {
  2. private static final String TAG = "FirstBroadcast";
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. //当Broadcast被intent启动的时候调用该方法
  6. Log.d(TAG,"The Broadcast start");
  7. }
  8. }

步骤二:添加intent描述(有两种方式)

  1. <!--方法一:在AndroidManifest.xml中注册-->
  2. <receiver android:name=".FirstBroadcast">
  3. <intent-filter>
  4. <!--name可以系统给的也可以是自定义的-->
  5. <action android:name="com.chen.firstBroadcast"/>
  6. </intent-filter>
  7. </receiver>
  1. //方法二:在Activity代码中编写
  2. public class MainActivity extends AppCompatActivity {
  3. private FirstBroadcast mFirstBroadcast;
  4.  
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9.  
  10. mFirstBroadcast = new FirstBroadcast();//创建Broadcast
  11. IntentFilter intentFilter = new IntentFilter();//创建intent描述
  12. intentFilter.addAction("com.chen.FirstBroadcast");//将描述装入
  13. registerReceiver(mFirstBroadcast,intentFilter);//注册到Broadcast
  14. }
  15. }

步骤三:利用Intent发送给Broadcast

  1. //在MainActivity中
  2. Intent intent1 = new Intent("com.chen.FirstBroadcast");、、刚在注册的描述
  3. sendBroadcast(intent1);

3.有序广播和普通广播

普通广播(Normal Broadcast):可在同一时刻被所有接收者接收到,所以说缺点是:无法将数据结果传递给下一个。

sendBroadcast()发送无序广播

有序广播(Ordered Broadcast):有序广播的接收者按照之前定义的优先级依次接收Broadcast,如:A>B>C,则A先收到,然后B,最后C。

设置优先级①在AndroidManifest的<Intent-filter android:priority=数值> ②在代码的IntentFilter对象的 setPriority()取值范围是1~1000

sendOrderedBroadcast()发送有序广播。

同时,优先收到广播的接收者可以停止继续发送Broadcast:调用abortBroadcast();

优先收到广播的接收者可以通过setResultExtras(Bundle)将数据存入Broadcast,然后传送给下一个接收者,下一个接收者通过Bundle bundle = getResultExtras(true);

接收数据

4.注解

1.若BroadRecevier的onRecevie()不能再10秒内完成的话,Android会认为该程序无响应。

2.系统收到短信发出的Broadcast属于Ordered Broadcast。

5.作用

1.Service与Activity之间交互的桥梁

2.接收系统发出的Broadcast(系统发出的常用广播:http://blog.sina.com.cn/s/blog_7dbac1250101mt5h.html

BroadcastReceiver浅析的更多相关文章

  1. Android AIDL浅析及异步使用

    AIDL:Android Interface Definition Language,即 Android 接口定义语言. AIDL 是什么 Android 系统中的进程之间不能共享内存,因此,需要提供 ...

  2. Android BroadcastReceiver使用

    1. 介绍 BroadcastReceiver用于接收广播事件(Intent), 是Android四大组件之一 2. 使用 2.1  实现广播接收类 实现一个广播收类继承BroadcastReceiv ...

  3. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  4. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  5. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  6. netty5 HTTP协议栈浅析与实践

      一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...

  7. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  8. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

  9. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

随机推荐

  1. 在sql server中怎样获得正在执行的Sql查询

    方法1:使用DBCC inputbuffer(spid) 使用SP_WHO获得SPID,然后再执行上面的DBCC command,参见下图 执行一段sql语句 打开另一个query窗口并执行SP_WH ...

  2. 对获取config文件的appSettings节点简单封装

    转:http://www.cnblogs.com/marvin/archive/2011/07/29/EfficiencyAppSetting.html C#的开发中,无论你是winform开发还是w ...

  3. (原)STL中vector的疑问

    以前基本上没有用过STL,当然包括里面的vector.今天试验了一下. 主要看了这个网址: http://blog.csdn.net/phoebin/article/details/3864590 代 ...

  4. ado.net实现一个通知公告功能

    一.建立相应的数据库,此处就不多说了,相信大家都非常了解

  5. LogBoy logo

  6. Ice_cream's world I--hdu2120

    Ice_cream's world I Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. Rule Or WorkFlow

    The main value of a Workflow engine is that it makes it possible to customize the flows through some ...

  8. QProgressBar和QProgressDialog的简单实用

    在QT中可以用QProgressBar或着QProgressDialog来实现进度条. QProgressBar的使用 首先在designer中拖一个按钮和进度条部件,按下面初始化 ui->pr ...

  9. Check .NET Version with Inno Setup

    原文 http://www.kynosarges.org/DotNetVersion.html Inno Setup by Jordan Russell is a great installation ...

  10. C语言的本质(23)——C标准库之输入与输出(上)

    1..文件的基本概念 所谓"文件"是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库 ...