定义
BroadcastReceiver(广播接收器)可以用于过滤外部事件(如数据网络状态发生变化、电话呼入)并对感兴趣的事件作出反应。广播接收器没有用户界面,但可用于启动activity/service,或者可以给用户发送通知(Notification)。
广播分类
1.按发送方式分:1)标准广播,Context.sendBroadcast(),以异步的方式传播广播,所有广播接收器几乎在同一时间内收到广播(无顺序之分),此种广播无法被截断、广播数据无法被修改。2)有序广播,Context.sendorderBroadCast(),是以顺序的方式传播广播,同一时刻仅有一个接收器接收到广播,每个接收器都可以选择继续传播或者截断这个广播。广播从优先级最高的接收器传播到优先级最低的,对于同一优先级的接收器,以注册的先后顺序来进行传播。此种广播可以被终止,数据可以被修改。(最高优先级为2^31-1)
2.按定义分:系统广播&自定义广播。系统广播具有特定的intent-filter,都指定了具体的action。系统广播发送之后将被相应的广播接收器接收。
广播接收器分类
1)静态注册,在AndroidManifest注册的广播,随系统启动而运行,程序还未进行就处于活跃状态。此种广播接收器与activity声明周期无关联,activity销毁后依旧能收到广播。(某些action的广播不能使用静态注册)
2)动态注册,使用代码进行注册的广播接收器。受activity生命周期影响,activity销毁则广播接收器失效。
注意事项
广播接收器只有十秒钟左右的生命周期,无法进行耗时的操作,否则会引起ANR。也无法通过开启子线程的方式来进行耗时操作,因为广播接收器在生命周期结束之后很容易被系统回收内存,此时广播接收器所在进程会被杀死(属于空进程)。此时由于宿主进程被杀死,子线程也会被杀死。正确的方式是通过启动service来进行耗时操作。
网友评论