APP开发实战73-BroadcastReceiver

本文详细介绍了Android中的BroadcastReceiver,包括如何自定义并实现onReceive方法,以及静态和动态注册的区别。静态注册通常在AndroidManifest.xml中完成,而动态注册则在代码中通过Context的registerReceiver函数实现。注意静态注册的广播接收器在Android 3.1以后的行为变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(转自; http://www.cnblogs.com/lwbqqyumidi/p/4168017.html)

18.2BroadcastReceiver

自定义广播接收器需要继承基类BroadcastReceivre,并实现抽象方法onReceive(context,intent)方法。广播接收器接收到相应广播后,会自动回到onReceive(..)方法。

默认情况下,广播接收器也是运行在UI线程,因此,onReceive方法中不能执行太耗时的操作。否则将因此ANR。一般情况下,根据实际业务需求,onReceive方法中都会涉及到与其他组件之间的交互,如发送Notification、启动service等。

BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册。

18.2.1静态注册

直接在AndroidManifest.xml文件中进行注册。规则如下:

<receiverandroid:enabled=["true" | "false"]

android:exported=["true"| "false"]

android:icon="drawableresource"

android:label="stringresource"

android:name="string"

android:permission="string"

android:process="string">

.. .

</receiver>

其中,需要注意的属性:

android:exported ——此broadcastReceiver能否接收其他App的发出的广播,这个属性默认值有点意思,其默认值是由receiver中有无intent-filter决定的,如果有intent-filter,默认值为true,否则为false。(同样的,activity/service中的此属性默认值一样遵循此规则)同时,需要注意的是,这个值的设定是以application或者application user id为界的,而非进程为界(一个应用中可能含有多个进程);
android:name  —— 此broadcastReceiver类名;
android:permission  ——如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接收;
android:process  ——broadcastReceiver运行所处的进程。默认为app的进程。可以指定独立的进程(Android四大基本组件都可以通过此属性指定自己的独立进程)

常见的注册形式有:

<receiverandroid:name=".MyBroadcastReceiver" >

    <intent-filter>

        <actionandroid:name="android.net.conn.CONNECTIVITY_CHANGE" />

    </intent-filter>

    <intent-filter>

        <actionandroid:name="android.intent.action.BOOT_COMPLETED" />

    </intent-filter>

</receiver>

其中,intent-filter由于指定此广播接收器将用于接收特定的广播类型。本示例中给出的是用于接收网络状态改变或开启启动时系统自身所发出的广播。当此App首次启动时,系统会自动实例化MyBroadcastReceiver,并注册到系统中。

之前常说:静态注册的广播接收器即使app已经退出,主要有相应的广播发出,依然可以接收到,但此种描述自Android 3.1开始有可能不再成立,具体分析详见本文后面部分。

18.2.2动态注册

动态注册时,无须在AndroidManifest中注册<receiver/>组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值