11

I already have an alarm that fires daily which has FLAG_UPDATE_CURRENT. This is the log from developer's console.

java.lang.SecurityException: !@Too many alarms (500) registered from pid 32326 uid 10206
    at android.os.Parcel.readException(Parcel.java:1540)
    at android.os.Parcel.readException(Parcel.java:1493)
    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)
    at com.google.firebase.iid.FirebaseInstanceIdService.zzagl(Unknown Source)
    at com.google.firebase.iid.FirebaseInstanceIdService.zzd(Unknown Source)
    at com.google.firebase.iid.FirebaseInstanceIdService.zza(Unknown Source)
    at com.google.firebase.iid.FirebaseInstanceIdService.zzm(Unknown Source)
    at com.google.firebase.iid.zzb$2.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)

I am using Firebase 9.6.1.


UPDATE:

public static void setAlarm(Context context, boolean isSet) {
  try {
     AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
     Intent intent = new Intent(context, AlarmReceiver.class);

     boolean isWorking = (PendingIntent.getBroadcast(context,
                SettingsActivity.REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE) != null);

     if (isSet && !isWorking) {
        PendingIntent sender = PendingIntent.getBroadcast(context,
                                   SettingsActivity.REQUEST_CODE, intent, 
                                   PendingIntent.FLAG_UPDATE_CURRENT);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());

        calendar.set(Calendar.HOUR, 10);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);

        am.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                               AlarmManager.INTERVAL_DAY, sender);
      } else {
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                                      SettingsActivity.REQUEST_CODE, intent,
                                      PendingIntent.FLAG_CANCEL_CURRENT);
        am.cancel(pendingIntent);
        pendingIntent.cancel();
      }
  } catch (Exception e) {
      Crashlytics.logException(e);
  }
}
ישו אוהב אותך
  • 28,609
  • 11
  • 78
  • 96
mihirjoshi
  • 12,161
  • 7
  • 47
  • 78
  • This question will help you http://stackoverflow.com/questions/29344971/java-lang-securityexception-too-many-alarms-500-registered-from-pid-10790-u/29703161 – Dhaval Solanki Oct 17 '16 at 07:15
  • 3
    No, it won't. Firstly it doesn't mention anything about firebase. Secondly, I am already using `FLAG_UPDATE_CURRENT`. – mihirjoshi Oct 17 '16 at 07:21
  • 1
    It seems like internal bug in firebase. As mentioned in firebase google group (https://groups.google.com/forum/#!topic/firebase-talk/Q_zycHnTGu0) the problem appears (at most for Samsung devices) even if you don't use any alarms in your app. – Roman_D Oct 24 '16 at 18:08
  • Are you testing it in Samsung+Lollipop . And also share your code for alarm – Zar E Ahmer Oct 25 '16 at 12:09
  • Crashes both on Samsung's lollipop and marshmallow.Downgrading to firebase 9.4.0 solves the crash issue. Updated alarm code. – mihirjoshi Oct 26 '16 at 02:36
  • Your problem are solved: http://stackoverflow.com/a/40786050/3996257 – Merlí Escarpenter Pérez Nov 24 '16 at 12:09

1 Answers1

2

According to this thread, the bug has been fixed by the Firebase team in the 10.0 release. Release notes are here.

Codiak
  • 1,832
  • 2
  • 13
  • 20