3.4.2 触发器组件的使用
使用触发器组件进行事件监听有两种方法,本书称为冷插拔和热插拔。所谓冷插拔,就是将触发器组件的相关信息写在应用的配置文件中。当有广播事件发生时,组件管理服务就会从安装包管理服务中获取已安装应用的触发器组件信息,挑选出所有符合事件需求的组件,依次构造并调用BroadcastReceiver.onReceive方法执行相关的操作(如图3-12所示)。
当应用需要后台监听事件时,都需要按此方式配置触发器组件,比如监听开机事件、来电事件、新信息事件等[1]。
所谓热插拔,则是通过Context.registerReceiver和Context.unregisterReceiver,动态地将触发器组件与所需要监听的事件进行绑定。如图3-12所示,在实际开发中,通常会在界面组件Activity.onResume函数中进行触发器组件的注册,而在Activity.onPause函数中注销对应的触发器组件。也就是说,只有当应用处于前台并与用户交互时,才会接收并处理对应的事件,因此,热插拔触发器组件适合处理与当前界面相关的事件。
图 3-12 Android触发器组件的注册模型
在Android中,很多事件只允许通过热插拔的模式监听,而无法通过冷插拔的模式使用,比如时间变化事件、电量变更事件等。这类事件触发频率通常很高,如果允许后台监听,很可能会导致进程频繁地被构造和销毁,从而影响系统的整体效率。因此,只有应用正在与用户交互、需要实时获知相关信息变化时,才能够进行监听。
[1]Android系统中默认提供的所有广播事件,参见:http://developer.android.com/reference/android/content/Intent.html。