项目用了AlarmManager之后,出现了以下报错;
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)
根据问题描述,主要的意思是说,你在AlarmManager中注册了太多闹钟,引起安全性问题了。
这个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应当是一个常量,不应该是一个变化的值。如果是一个变化的值,应用被杀死后重启,同一个功能就可能有多个闹钟。