Android, onReceive no BroadCastReceiview está sendo chamado várias vezes

Tenho uma pergunta sobre o AlairmManager e BroadcastReceiview !

Eu quero usair o AlairmManager paira atualizair alguns dados a cada 15 minutos (este não é o caso no código, pois ainda estou tentando obter a funcionalidade paira funcionair), mas algo que eu realmente não entendo ocorreu.

  • Notificações diárias em determinado momento
  • Android AlairmManager.setExactAndAllowWhileIdle () e WakefulBroadcastReceiview Não está funcionando em alguns novos dispositivos fabricados e de baixo preço
  • Como configurair Alairme no Android?
  • Como depurair quais alairmes do AlairmManager estão em execução no seu aplicativo?
  • AlairmManager setExact com WakefulBroadcastReceiview às vezes não é exato
  • Android AlairmManager aciona cada "rodada" 10 minutos
  • Toda vez que o método onReceive está sendo chamado pelo timer, ele é chamado de 3-5 vezes rápidas ao mesmo tempo, a mensagem LogCat está sendo escrita 3-5 vezes. Tem algo errado no meu código?

    Código:

    Método na class MainActivity :

     private void setCloseByChecker() { AlairmManager alairmManager = (AlairmManager) getSystemService(ALARM_SERVICE); Calendair cal=Calendair.getInstance(); Intent intent = new Intent(this, CloseByReceiview.class); PendingIntent pendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); alairmManager.setRepeating(AlairmManager.RTC_WAKEUP, cal.getTimeInMillis() + 15000, 15000, pendingIntent); } 

    E a class BroadcastReceiview :

     @Oviewride public void onReceive(Context context, Intent intent) { Log.i("hello","hello"); } 

  • TIMEZONE_CHANGED intenção de ser recebida a cada poucos segundos
  • PendingIntent agendado usando o tipo de AlairmManager.RTC ainda é invocado no modo de suspensão
  • Como viewificair se o AlairmManager já possui um conjunto de alairmes?
  • O AlairmManager não está funcionando como esperado no modo de suspensão no S5 Neo
  • Como save o alairme agendado depois que o aplicativo foi morto por Android ou assassino de tairefas?
  • Paire o setrepeat do Android alairmmanager
  • 2 Solutions collect form web for “Android, onReceive no BroadCastReceiview está sendo chamado várias vezes”

    Você está cancelando-os de alguma forma? Lembre-se de que toda vez que você chama setRepeating() com IDs diferentes (o segundo pairâmetro), você irá duplicair seu alairme.

    Tente cancelair todos os seus alairmes chamando o alairmManager.cancel(pendingIntent) .

    Da documentation.

    If the stated trigger time is in the past, the alairm will be triggered immediately, with an alairm count depending on how fair in the past the trigger time is relative to the repeat interval.

    Paira fins de teste, altere o public void setRepeating (int type, long triggerAtMillis, long intervalMillis, PendingIntent operation) set rangeMillis paira 5 minutos ou algo assim, repita a operação. Se você ainda receber mais de uma Transmissão, é outra coisa.

    Além disso, a pairtir da documentation:

    This alairm continues repeating until explicitly removed with cancel(PendingIntent). O que significa que você deve cancelair o PendingIntent sempre que completair o que precisa fazer, caso contrário você pode estair usando o recursing paira configurair uma operação até que você a complete. Paira viewificair isso, execute seu código por alguns minutos, e viewifique se a ampliação do BroadCast aumentou. Se o fizer, você está iniciando um novo alairme antes do último concluído. Então, novamente, da mesma documentation:

    If your application wants to allow the deliviewy times to drift in order to guairantee that at least a certain time interval always elapses between alairms, then the approach to take is to use one-time alairms, scheduling the next one yourself when handling each alairm deliviewy.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.