Too many alarms (500) registered

来源:互联网 发布:印刷开单软件 编辑:程序博客网 时间:2024/05/17 22:25

项目发布后,收集部分用户反馈以下BUG:

StackTrace=!@Too many alarms (500) registered from pid 5354 uid 10152java.lang.SecurityException: !@Too many alarms (500) registered from pid 5354 uid 10152
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.app.IAlarmManager$Stub$Proxy.set(IAlarmManager.java:206)
at android.app.AlarmManager.setImpl(AlarmManager.java:428)
at android.app.AlarmManager.set(AlarmManager.java:215)

这个BUG基本都是在三星机器上出现,主要解决方法有:

1. 不要使用AlarmManager.setRepeating方法。

     setRepeating注册的闹钟会常驻在Android系统进程里,那怕应用进程被杀掉,闹钟也不会被取消。

     如果需要重复性的闹钟,可以在接到闹钟广播后,再重新启动一个闹钟,自己模拟setRepeating。

2. 通常设置闹钟的代码如下

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


       PendingIntent.getBroadcast的第2个参数requestCode可以用来区分不同的闹钟。建议同一个功能使用的闹钟(假设你应用里有多个功能都用到闹钟),其requestCode应当是一个常量,不应该是一个变化的值。如果是一个变化的值,应用被杀死后重启,同一个功能就可能有多个闹钟。

       PendingIntent.getBroadcast的第4个参数flags,建议用PendingIntent.FLAG_UPDATE_CURRENT,否则应用被杀死重启,也可能有多个相同闹钟。


最后,修改后覆盖安装,你可能会发现还有这个crash。relax, 这不是你的错。重启手机即可。因为覆盖安装,旧版本注册的闹钟还是在的,只有重启手机才会清空。

              

              

0 0