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

[02] 四大组件之BroadcastReceiver

时间:2015-03-02 18:36:24      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

一、BroadcastReceiver的基本概念

广播接收者,无界面,用来接收系统事件或自定义广播(intent形式)。可以用它对外部事件进行过滤并只对感兴趣的事件作出响应,比如网络变化,电量变化等,也可以是启动一个activity或Service或弹出一个Notification等。

广播分类:

随机广播:通过Context.sendBroadcast()发送。所有接收者接收顺序随机,不能结束或终止广播。

有序广播:通过Context.sendOrderedBroadcast()发送,根据优先级(android:priority)顺序接收,前面的接受者可以改变或者abort这个广播。

StickyBroadcast 粘性广播:也分有序和无序,通过Context.sendStickyBroadcast(intent)或Context.sendStickyOrderedBroadcast()发送,需要添加权限"android.permission.BROADCAST_STICKY",粘性广播会一直驻留在系统中,以便注册者能够尽快收到广播,直到调用removeStickyBroadcast(intent)把它去掉,

 

二、生命周期

只有一个onReceive()的生命周期回调函数,执行完该函数就销毁该对象,生命周期只有10秒左右,如果在onReceive()内处理超过10miao的事情,则会报ANR,所以如果有耗时操作最好发送Intent给Service(后台服务)来完成。(注:这里如果用子线程来处理耗时工作是不可靠的,因为BroadcastReceiver的生命周期很短10s,有可能子线程没结束BroadcastReceiver就先结束了,如果BroadcastReceiver所在的进程此时没有任何活动组件(即空进程),便很有可能被杀掉,工作的子线程也会被杀死。)

 

三、基本用法

1、注册

  • 静态注册

只要设备开机,哪怕APP未启动,也能实现对注册广播的监听。

在AndroidManifest.xml中通过xml形式静态注册,如下:

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

当然,你此时用到了接收短信的权限,需要添加短信相关的权限配置。

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
  • 动态注册

运行时的上下文销毁,注册便失效。动态注册就是在代码中运行时注册,形式如下:

private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {

       @Override
       public void onReceive(Context context, Intent intent) {

       }
};

IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(myBroadcastReceiver, intentFilter);

... ...
//取消注册监听
unregisterReceiver(myBroadcastReceiver);

 

2、发送 & 接收

上面基本概念已描述过,大多通过Context.send****Broadcast(),根据使用场景,发送你需要的广播,括号里主要传入intent对象,intent描述过滤的action和category,还可以封装少量数据。在接收过程三个步骤:1.创建Receiver对象-->2.调用onReceive()-->3.销毁。接收优先级上,注明android:priority的数值越大,越先接收,同级别则随机;如果未注明priority情况下,代码注册先于xml注册接收。

[02] 四大组件之BroadcastReceiver

标签:

原文地址:http://www.cnblogs.com/ddd2014/p/4309255.html

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