BroadcastReceiver有它的执行点, 过多的注册BroadcastReceiver会消耗系统性能,
本文讲下如何通过动态的注册BroadcastReceiver来避免对性能的影响。
最简单的方式监测系统状态的变化就是为每个需要监测的状态都注册一个BroadcastReceiver。然后在这些Receiver中根据不同的状态去修改您程序的功能和逻辑。
通过这种方式有个弊端就是每次程序收到这个事件的时候都会唤醒设备CPU– 而大部分的事件对程序是没用的。
一种更好的做法就是在运行时禁用/启用Broadcast receiver,这样在Manifest文件中注册的Receiver就只会在需要的时候才接收事件。
动态启用Receiver来提高性能
用户可以使用PackageManager来启用/禁用在Manifest文件中定义的组件,下面的代码演示了如何禁用/启用一个特定的Receiver:
ComponentName receiver =newComponentName(context, myReceiver.class); PackageManager pm = context.getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)
通过这种手段,如果您发现网络连接已经断开了,除了网络状态Receiver以为 您就可以禁用其他的Receiver了。相反的,一旦网络连接恢复了,您就可以禁用网络状态Receiver了, 在每次数据更新前都检测下网络是否可用,并且根据网络状态重新协调相关的Receiver和程序的功能。
您可以用同样的手段来延迟一些需要高速网才能完成的操作。只需要启用一个Receiver来监测连接类型的变化,当用户使用Wi-Fi的时候才开始启动下载操作。