BroadCastReceiver组件本质是一种全局的监听器,用于监听系统全局的广播消息。由于BroadCastReceiver是一种全局的监听器,因此他可以非常方便的实现系统之间不同组件之间的通信。

BroadCastReceiver简介:

BroadCastReceiver用于接收程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent,程序启动BroadCastReceiver需要两步:

1、创建需要启动的BroadCastReceiver的Intent

2、调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadCastReceiver

当应用程序发出一个Broadcast Intent之后,所有匹配该Intent的BroadcastReceiver都可能被启动。

BroadCastReceiver本质是一个监听器,因此只要重写BroadCastReceiver的onReceive(Context context, Intent intent)方法即可。

一旦实现了BroadCastReceiver,接下来就应该指定该BroadCastReceiver能匹配的Intent,此时有两种方法:

1、使用代码进行指定,调用BroadCastReceiver的Context的Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法指定,如:

IntentFilter filter = new IntentFilte("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);

2、AndroidManifest.xml清单文件中进行配置:

 <receiver android:name=".IncomingSMSReceiver">
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

每次系统Broadcast事件发生后,系统就会创建对应的BroadcastReceiver的实例,并自动触发他的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。

如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在BroadcastReceiver的onReceive()方法中执行一些耗时的操作,否则会弹出ANR的对话框。

如果确实需要根据Broadcast来完成一项比较耗时的操作,则可以考虑通过Intent启动一个Service来完成操作。不应该使用新的线程去完成操作,因为BroadcastReceiver本身的生命周期很短,可能出现的情况是子线程可能还没有结束,BroadcastReceiver就已经退出了。如果BroadcastReceiver所在的进程结束,虽然该进程内还有用户启动的新线程,但是由于该进程内不包含任何活动组件,因此系统会在内存紧张时优先结束该进程,这样就可能导致BroadcastReceiver启动的子线程不能执行完成。

最新文章

  1. 以冒泡排序为例--malloc/free 重定向stdin stdout
  2. Java--自定义Class并且在内存中编译,加载,实例化
  3. 搭建自己的apache tomcat php mysql 环境和WordPress站点制作
  4. Google在KDD2013上关于CTR的一篇论文
  5. sprintf()函数的用法
  6. C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)
  7. Ado.net中简单的DBHelper类(增删改查)
  8. HtmlAgilityPack组件
  9. nginx: [warn] conflicting server name &quot;localhost&quot; on 0.0.0.0:80, ignored
  10. 从ASP了解Http Buffer
  11. ios实现屏幕旋转的方法
  12. Oracle数据库生成UUID
  13. sql 语句总结
  14. Myeclipse10、Maven构建Javaweb项目
  15. CMDB项目开发
  16. php伪造ip头
  17. 如何在HTTP客户端与服务器端之间保持状态(转)
  18. Codeforces 336D Dima and Trap Graph 并查集
  19. I/O会一直占用CPU吗?【转载】
  20. python 几个重要的概念

热门文章

  1. 下载Excel文件功能通过火狐浏览器下载没有后缀名
  2. C#序列化json属性名首字母变成小写的解决方案
  3. SVN版本管理 目录结构
  4. shell条件测试举例
  5. 【串线篇】SQL映射文件delete/ insert/ update标签
  6. UVA1411 Ants
  7. MySQL-事件总结
  8. 记一次pycharm和vscode因网络问题插件下载失败的问题
  9. PHP排序函数:sort()、rsort()、asort()、arsort()、ksort()、krsort()
  10. 小程序推送消息(Template)