BroadcastReceiver(接收广播)
2016-04-04 11:16
295 查看
Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也能够播放一个广播。
程序能够有随意数量的
broadcast receivers来响应它认为重要的通知。broadcast receiver能够通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最 典型的是在状态栏显示一个图标,这样用户就能够点它打开看通知内容。
通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来暂时会广播一个Intent出去,我们能够利用注冊一个Broadcast
Receiver来监听到这些Intent并获取Intent中的数据。当一个广播消息被Receiver监听到时。Android会调用它的onReceive()方法,并将包括消息的 Intent对象传给它。 onReceive中代码的运行时间不要超过10s。否则系统会出现ANR。(系统出现ANR的情况有两个:(1)、事件分发时超过5秒无响应;(2)、接收到消息后超过10秒没有处理完)
Receiver仅仅在onReceive方法运行时是激活状态。仅仅要onReceive一返回,Receiver就不再是激活状态了。Receiver进
程是被一个激活状态的broadcast receiver所保护而不被系统终止的。一旦onReceive返回。Receiver进程broadcast receiver所保护而变为一个空进程,空进程是可以在随意时刻被终止的。这就带来了一个问题:当响应一个广播信息的处理十分耗时的时候,那么就应该把 这个处理放在一个单独的线程里去执行,来保证主线程里的其它用户交互组件可以继续执行。而一旦这么做。当onReceive()唤起一个线程后就会立即返 回。这时就会把Receiver进程放到被终止的境界。解决问题的方案是在onReceive()里開始一个Service。让这个Service去
做这件事情,那么系统就会觉得这个进程里还有活动正在进行。
(receive到message会启动宿主进程,当返回后,假设没有其它交互。宿主进程会为empty,因此假设要长期执行宿主进程,就start service)。
在Activity中发送广播:
在Mainfest.xml中注冊广播接收:
接收广播:
程序能够有随意数量的
broadcast receivers来响应它认为重要的通知。broadcast receiver能够通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最 典型的是在状态栏显示一个图标,这样用户就能够点它打开看通知内容。
通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来暂时会广播一个Intent出去,我们能够利用注冊一个Broadcast
Receiver来监听到这些Intent并获取Intent中的数据。当一个广播消息被Receiver监听到时。Android会调用它的onReceive()方法,并将包括消息的 Intent对象传给它。 onReceive中代码的运行时间不要超过10s。否则系统会出现ANR。(系统出现ANR的情况有两个:(1)、事件分发时超过5秒无响应;(2)、接收到消息后超过10秒没有处理完)
Receiver仅仅在onReceive方法运行时是激活状态。仅仅要onReceive一返回,Receiver就不再是激活状态了。Receiver进
程是被一个激活状态的broadcast receiver所保护而不被系统终止的。一旦onReceive返回。Receiver进程broadcast receiver所保护而变为一个空进程,空进程是可以在随意时刻被终止的。这就带来了一个问题:当响应一个广播信息的处理十分耗时的时候,那么就应该把 这个处理放在一个单独的线程里去执行,来保证主线程里的其它用户交互组件可以继续执行。而一旦这么做。当onReceive()唤起一个线程后就会立即返 回。这时就会把Receiver进程放到被终止的境界。解决问题的方案是在onReceive()里開始一个Service。让这个Service去
做这件事情,那么系统就会觉得这个进程里还有活动正在进行。
(receive到message会启动宿主进程,当返回后,假设没有其它交互。宿主进程会为empty,因此假设要长期执行宿主进程,就start service)。
在Activity中发送广播:
1 2 3 | Intent intent=new Intent();intent.setAction("cn.smc.thm");MainActivity.this.sendBroadcast(intent); |
1 2 3 4 5 | <receiver android:name=".BroadcastReceiverDemo1" > <intent-filter> <action android:name="cn.smc.thm" /> </intent-filter></receiver> |
1 2 3 4 5 6 7 8 9 10 11 | public class BroadcastReceiverDemo1 extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { if (arg1.getAction().equals("cn.smc.thm")) { Log.i("thm", "BroadcastReceiverDemo1 receive"); } } } |
相关文章推荐
- 2016微软开发者大会 - 简洁收集
- 【BZOJ3302】[Shoi2005]树的双中心【DFS】【TreeDP】
- 1051. 复数乘法 (15)
- 重载重写区别
- windows下安装python出现2503错误的解决办法
- Learning Gulp
- 机器学习实战之adaboost
- 构建之法阅读笔记04
- eclipseGUI的可视化开发工具插件
- HDOJ-1536 S-Nim
- 1010. 一元多项式求导 (25)——做题纪录
- 【poj2728】Desert King
- 关于 iOS的 App 项目开发的流程
- 用TP对Oracle数据库过程问题
- 《MySQL必知必会》读书笔记
- 【Qt】QDebug
- POJ3050-Hopscotch
- 求字符串中的最长回文子串
- 第五周的学习进度条
- D3绘制水平柱状图