监听电池电量

最近项目需要对电池电量的变化进行监听,最初在Activity测试没有问题,后来在Manifest.xml文件中静态注册,结果竟然接收不到电池电量的广播。~~~~~

后来在网上搜索发现系统有五个不能静态注册的广播,这里记录一下:

  android.intent.action.SCREEN_ON

  android.intent.action.SCREEN_OFF

  android.intent.action.BATTERY_CHANGED

  android.intent.action.CONFIGURATION_CHANGED

  android.intent.action.TIME_TICK

原因(有以下几种说法,提供给大家参考):

  1.提高系统效率:这两个事件是android的基本事件,如果大多数程序监听,会大大的拖慢整个系统,所以android不鼓励我们在后台监听这两个事件。

  2.因为有序广播的优先级问题。以上这些广播中,静态注册时,系统的优先级大于应用,并且系统阻止了广播的向下传播。又因在Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的。故用动态注册代替静态注册。

  3.系统安全问题。

解决方法:

动态注册不能放在Activity中,因为在Activity中注册Activity销毁时要调用unregisterReceiver,随着Activity的销毁不能再接收到广播,因此我把动态注册放在Application中,或者是在service中动态注册。



监听电池电量_第1张图片
电池电量广播监听
动态注册电池变化广播

你可能感兴趣的:(监听电池电量)