码迷,mamicode.com
首页 > 其他好文 > 详细

BroadcastReceiver(接收广播)

时间:2014-07-10 20:36:14      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:android   broadcastreceiver   

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中发送广播:

 1
 2
 3
Intent intent=new Intent();
intent.setAction("cn.smc.thm");
MainActivity.this.sendBroadcast(intent);


在Mainfest.xml中注册广播接收:

 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");
}
}
}

BroadcastReceiver(接收广播),布布扣,bubuko.com

BroadcastReceiver(接收广播)

标签:android   broadcastreceiver   

原文地址:http://blog.csdn.net/u013807286/article/details/37594697

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!