APP开发实战73-BroadcastReceiver

(转自;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文件中进行注册。规则如下:

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

android:icon="drawableresource"

android:label="stringresource"

android:name="string"

android:permission="string"

android:process="string">

.. .

其中,需要注意的属性:

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四大基本组件都可以通过此属性指定自己的独立进程)

常见的注册形式有:

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

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

18.2.2动态注册

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,539评论 25 709
  • 本文转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1....
    Ernest_Chang阅读 739评论 0 3
  • 前言 本来想写一下广播的,发现查阅后有整理的不错的,只好转载图个简便,日后好复习转载:http://www.cnb...
    提升即效率阅读 1,411评论 0 10
  • 广播接收器 是Android的四大组件之一,可见广播在Android中的重要性; 1. 什么是广播? 广播(Bro...
    Lost_Robot阅读 1,992评论 2 10
  • 文/暄妍若梅慢下来,感受生活……一直很想静下来,静下来,聆听花开的声音静下来记一段清新的文字静下来与你携手去看云卷...
    暄妍若梅阅读 298评论 1 7