Firebase触发了过多的警报。

11

我已经有一个每天触发的闹钟,它具有FLAG_UPDATE_CURRENT。这是开发人员控制台的日志。

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)

我正在使用 Firebase 9.6.1


更新:

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);
  }
}

这个问题会对你有所帮助:https://dev59.com/H10b5IYBdhLWcg3wT_xr#29703161 - Dhaval Solanki
3
不会。首先它没有提到Firebase的任何内容。其次,我已经在使用FLAG_UPDATE_CURRENT - mihirjoshi
1
似乎是 Firebase 内部的 bug。如在 Firebase Google 群组 (https://groups.google.com/forum/#!topic/firebase-talk/Q_zycHnTGu0) 中所述,该问题出现(至少对三星设备如此),即使您的应用程序中没有使用任何闹钟。 - Roman_D
你是在三星+棒棒糖上测试吗?还请分享你的闹钟代码。 - Zar E Ahmer
在三星的棒棒糖和棉花糖上都会崩溃。降级到Firebase 9.4.0可以解决崩溃问题。更新了闹钟代码。 - mihirjoshi
你的问题已经解决:https://dev59.com/9pvga4cB1Zd3GeqP8uLE#40786050 - Merlí Escarpenter Pérez
1个回答

2
根据该讨论,Firebase团队在10.0版本中修复了该漏洞。 此处有发布说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接