Too many alarms (500) registered

来源:互联网 发布:淘宝直通车图片大小 编辑:程序博客网 时间:2024/05/17 22:01

公司项目开发时,同事见解总结。BUG基本都是在三星机器上出现。

1.PendingIntent.getBroadcast的第4个参数flags,建议用PendingIntent.FLAG_UPDATE_CURRENT,因为FLAG_CANCEL_CURRENT只是给Intent打上cancel标记,并没有立即取消,而FLAG_UPDATE_CURRENT只是更新那个Intent的状态,不会产生新的Intent。(可通过 adb shell dumpsys alarm 查看应用alarm相关信息)

2.PendingIntent.getBroadcast的第2个参数requestCode可以用来区分不同的闹钟。requestCode应当是一个常量,不然会产生多个闹钟。

3.不要使用AlarmManager.setRepeating方法。setRepeating注册的闹钟会常驻在Android系统进程里,那怕应用进程被杀掉,闹钟也不会被取消。如果需要重复性的闹钟,可以在接到闹钟广播后,再重新启动一个闹钟,自己模拟setRepeating。

示例代码:

Intent intent = new Intent("com.example.action.alarm");PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent,PendingIntent.FLAG_UPDATE_CURRENT);          mAlarmManager.set(AlarmManager.RTC_WAKEUP, sTime, pendingIntent);

修改后覆盖安装,可能还有这个问题。因为覆盖安装,旧版本注册的闹钟还在,只有重启手机才会清空。

0 0
原创粉丝点击