titel - Wie benutzt man den Android AlarmManager mit kleinen Intervallen wie 1 Minute?




title tag wordpress (2)

Ich habe versucht, AlarmManager mit 1-2 Minuten Intervall einzurichten, aber es sieht so aus, als würde es alle paar Minuten zufällig ausgelöst.

Da Sie sich entschieden haben, nicht zu zeigen, wie Sie "AlarmManager mit 1-2 Minuten Intervall einrichten", wird es schwierig sein, Ihnen zu helfen. Bitte lesen Sie die Dokumentation zum AlarmManager und beachten Sie das standardmäßig neue Verhalten von Android 4.4.

Ich möchte sicher sein, meine Hintergrundaufgabe per Android zu beenden, die Überwachung würde aufhören, wenn ich nur den Dienst verwende.

AlarmManager löst hier nicht alle Probleme. Wenn der Benutzer zum Beispiel die App zwangsweise anhalten möchte (z. B. über Einstellungen), werden Ihre Alarme entfernt.

Ist es möglich AlarmManager in kleinen, genauen Intervallen zu verwenden?

Verwenden Sie setRepeating() auf Android 1.0-4.3 und setExact() auf Android 4.4 +. Mit setExact() müssen Sie bei der Verarbeitung eines setExact() das nächste setExact() planen.

Wäre es besser, Service mit startForeground und partiellem WakeLock zu machen?

Nur wenn Ihr Gerät immer an die Stromversorgung angeschlossen ist (z. B. Industriemonitor).

https://code.i-harness.com

Ich möchte einen externen Servicemonitor einrichten und bei Problemen so schnell wie möglich benachrichtigt werden.

Ich habe versucht, AlarmManager mit 1-2 Minuten Intervall einzurichten, aber es sieht so aus, als würde es alle AlarmManager Minuten zufällig AlarmManager .

Natürlich möchte ich davor sicher sein, meine Hintergrund-Aufgabe per Android zu töten, was aufhören würde zu überwachen, wenn ich nur den Service benutze.

Ist es möglich AlarmManager in kleinen, genauen Intervallen zu verwenden?

Welche Ansätze werden in Anwendungen wie Facebook, Google Mail verwendet, um über neue Nachrichten zu informieren?

Wäre es besser, Service mit startForeground und partiellem WakeLock ?


Veröffentlichen eines Code-Snippets, das wir verwendet haben. Bitte ändern Sie gemäß Ihrer Anforderung. Wir benutzen es alle 15 Sekunden und es funktioniert.

public class AlarmManagerBroadcastReceiver extends BroadcastReceiver  
{
private static final int _REFRESH_INTERVAL = 60 * 1; // 1 minutes
// Alarm id
    private static final int ALARM_ID = 102; // This can be any random integer.

    PendingIntent pi = null;
    AlarmManager am= null;

@Override
    public void onReceive(Context context, Intent intent) 
    {
        /* All actions to be handled here.. */
        }


    // This is to initialize the alarmmanager and the pending intent. It is done in separate method because, the same alarmmanager and
    // pending intent instance should be used for setting and cancelling the alarm.

    public void SetContext(Context context)
    {
        this.context = context;
        am=(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        pi = PendingIntent.getBroadcast(context, ALARM_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    }

    // Setting the alarm to call onRecieve every _REFRESH_INTERVAL seconds
    public void SetAlarm()
    {
        // am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * _REFRESH_INTERVAL , pi);
        try
        {
            am.cancel(pi);
        }catch (Exception ignored){}
        am.setRepeating(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime(), 1000 * _REFRESH_INTERVAL , pi);
    }

    // Cancel the alarm.
    public void CancelAlarm()
    {
        am.cancel(pi);
    }

}




background-service