AlarmManager: Schlüsselkonzepte und Arbeit mit Alarmen

Autor: IT Sectr Veröffentlicht: 2026-03-28 Lesezeit: 8 Min.

AlarmManager ist ein Android-Systemdienst, der es Anwendungen ermöglicht, Aufgaben zu einer bestimmten Zeit auszuführen, selbst wenn die Anwendung nicht läuft oder sich das Gerät im Schlafmodus befindet. Im Gegensatz zu JobScheduler oder WorkManager garantiert AlarmManager eine präzise Auslösung, was ihn für Alarme, Kalendererinnerungen und zeitkritische Aufgaben unverzichtbar macht. Laut Android Developers, 2026 verhält sich setRepeating ab Android 4.4 wie eine ungenaue Wiederholung, und für präzise Alarme sind setExact oder setAlarmClock erforderlich.

Wichtige Punkte

  • AlarmManager ist ein Android-Systemdienst zur Ausführung von Aufgaben zu präzisen Zeiten, der auch im Schlafmodus funktioniert.
  • Alarmtypen umfassen ELAPSED_REALTIME, RTC, ELAPSED_REALTIME_WAKEUP und RTC_WAKEUP — mit und ohne Aufwecken.
  • setExact garantiert präzise Auslösung unter Android 4.4+, verbraucht aber mehr Akku.
  • setAlarmClock ist die einzige Methode, deren rechtzeitige Ausführung das System unter Android 6+ garantiert.
  • Ab Android 12 ist für präzise Alarme die Berechtigung SCHEDULE_EXACT_ALARM erforderlich.

Was ist AlarmManager?

AlarmManager ist ein Android-Systemdienst, der eine API zum Planen von Aufgaben mit präziser oder ungefährer Ausführungszeit bereitstellt. Es existiert seit der ersten Android-Version und bleibt die einzige zuverlässige Möglichkeit, Code zu einem bestimmten Zeitpunkt auszuführen, unabhängig vom Zustand der Anwendung und des Geräts.

Das Funktionsprinzip ist einfach: Die Anwendung sendet dem System einen PendingIntent mit der geplanten Auslösezeit. Wenn die angegebene Zeit erreicht ist, sendet das System den Intent an einen registrierten BroadcastReceiver oder startet einen Service. Selbst wenn sich das Gerät im Schlafmodus befand, ermöglicht WakeLock dem Prozessor, aufzuwachen und das Ereignis zu verarbeiten.

Der Hauptanwendungsbereich von AlarmManager sind Aufgaben, die eine präzise Zeitsteuerung erfordern: Alarme, Kalendererinnerungen, Start langlaufender Operationen zu einer bestimmten Stunde. Für Aufgaben, bei denen Genauigkeit nicht kritisch ist (tägliche Synchronisierung), empfiehlt Google WorkManager oder JobScheduler, da diese energieeffizienter sind.

Wie funktioniert AlarmManager?

AlarmManager empfängt von der Anwendung einen PendingIntent und eine Auslösezeit. Das System speichert diese Anfrage in seinem internen Planer und weckt den Prozessor zur angegebenen Zeit auf, um den Intent zuzustellen. Der Entwickler muss im Voraus einen BroadcastReceiver registrieren, der diesen Intent verarbeitet.

Alarmtypen

AlarmManager unterstützt 4 Alarmtypen: ELAPSED_REALTIME (Zeit seit dem Booten, weckt nicht), RTC (Echtzeit, weckt nicht), ELAPSED_REALTIME_WAKEUP (Zeit seit dem Booten, weckt das Gerät) und RTC_WAKEUP (Echtzeit, weckt). WAKEUP-Versionen sind notwendig, wenn die Aufgabe auch dann ausgeführt werden muss, wenn das Gerät schläft.

TypZeitWecktBeispiel
ELAPSED_REALTIMEseit BootneinBetriebszeitzähler
RTCUnix-ZeitstempelneinProtokollierung
ELAPSED_REALTIME_WAKEUPseit Bootjaperiodische Aufgabe
RTC_WAKEUPUnix-ZeitstempeljaWecker

Berechtigungen und Rechte

Ab Android 12 (API 31) ist für die Verwendung präziser Alarme (setExact) die Berechtigung SCHEDULE_EXACT_ALARM erforderlich. Der Benutzer kann sie über die Einstellungen widerrufen. Für Anwendungen, die einen präzisen Alarm mit Anzeige benötigen (z. B. Uhren-Apps), wird USE_EXACT_ALARM verwendet, das bei der Installation erteilt wird.

Methoden set, setRepeating und setExact

AlarmManager bietet drei Hauptmethoden zum Planen von Aufgaben. Die Wahl der Methode bestimmt die Auslösegenauigkeit und die Auswirkungen auf den Stromverbrauch des Geräts.

set — die Basismethode für eine einmalige ungenaue Auslösung. Das System kann die Zeit um bis zu einigen Minuten verschieben, um sie mit anderen Ereignissen zu gruppieren. Geeignet für Aufgaben, bei denen Genauigkeit nicht kritisch ist: Erinnerungen zum Öffnen der Anwendung.

setRepeating — eine Methode für periodische Wiederholungen. Seit Android 4.4 (API 19) ist setRepeating ungenau geworden — die Intervalle können variieren. Das System garantiert keine konstante Periode mehr. Anstelle von setRepeating wird empfohlen, setExact mit Neuplanung oder WorkManager mit PeriodicWorkRequest zu verwenden.

setExact — eine Methode für präzise einmalige Auslösung. Das System weckt das Gerät so nah wie möglich an der angegebenen Zeit auf. setAlarmClock ist ein Sonderfall von setExact, der auch ein Alarmsymbol in der Statusleiste anzeigt und die höchste Priorität unter allen Alarmtypen hat.

kotlin
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager

// Präziser einmaliger Alarm
val intent = Intent(this, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(
    this, 0, intent,
    PendingIntent.FLAG_IMMUTABLE
)

alarmManager.setAlarmClock(
    AlarmManager.AlarmClockInfo(
        targetTime, pendingIntent
    ),
    pendingIntent
)

Anwendungsbeispiel für AlarmManager

Ein typisches Szenario ist die Erstellung einer täglichen Erinnerung zu einer bestimmten Zeit. Dazu wird RTC_WAKEUP mit setExact verwendet. Bei Auslösung startet der BroadcastReceiver eine Benachrichtigung oder einen Service. Nach der Verarbeitung muss die Aufgabe für den nächsten Tag neu geplant werden.

kotlin
class ReminderReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent?) {
        val notificationManager =
            context.getSystemService(Context.NOTIFICATION_SERVICE)
                as NotificationManager

        val notification = NotificationCompat.Builder(
            context, "reminder_channel"
        )
            .setContentTitle("Erinnerung")
            .setContentText("Zeit, die Aufgabe zu erledigen")
            .setSmallIcon(R.drawable.ic_reminder)
            .build()

        notificationManager.notify(1001, notification)
    }
}

Für die tägliche Wiederholung wird setExact mit Berechnung der nächsten Auslösezeit verwendet. Im Intent können Flags zur Identifizierung verschiedener Erinnerungstypen übergeben werden. Stellen Sie sicher, dass der BroadcastReceiver in der AndroidManifest.xml mit WAKEUP-Aktionsbehandlung registriert ist.

kotlin
fun scheduleDailyReminder(context: Context, hour: Int, minute: Int) {
    val calendar = Calendar.getInstance().apply {
        set(Calendar.HOUR_OF_DAY, hour)
        set(Calendar.MINUTE, minute)
        set(Calendar.SECOND, 0)
        if (before(Calendar.getInstance())) {
            add(Calendar.DAY_OF_MONTH, 1)
        }
    }

    val alarmManager =
        context.getSystemService(Context.ALARM_SERVICE) as AlarmManager

    alarmManager.setExactAndAllowWhileIdle(
        AlarmManager.RTC_WAKEUP,
        calendar.timeInMillis,
        pendingIntent
    )
}

Optimierung und Empfehlungen

AlarmManager ist ein leistungsstarkes, aber stromhungriges Werkzeug. Jeder WAKEUP-Alarm holt das Gerät aus dem Schlafmodus und verbraucht Akkuleistung. Google empfiehlt, die Verwendung präziser Alarme zu minimieren und auf Android 6+ setExactAndAllowWhileIdle zu bevorzugen, um die Auswirkungen auf den Doze Mode zu reduzieren. Für periodische Aufgaben ohne Genauigkeitsanforderungen verwenden Sie WorkManager mit PeriodicWorkRequest, der kein Aufwecken des Geräts erfordert und bei jeder Ausführung keinen Akku verbraucht.

Testen von AlarmManager in Unit-Tests

Zum Testen von AlarmManager verwenden Sie TestAlarmManager aus dem Android Test Framework. Es ermöglicht die Emulation von Alarmauslösungen ohne Warten auf Echtzeit. Robolectric bietet ShadowAlarmManager, der set-, setExact- und setRepeating-Aufrufe abfängt und Methoden zur erzwungenen Auslösung und Überprüfung der Anzahl geplanter Aufgaben bereitstellt. Für Unit-Tests von BroadcastReceiver verwenden Sie Robolectric.getForegroundScheduler(). Espresso-Tests mit IdlingResource, die auf die Alarmauslösung in Integrationstests warten, sind ebenfalls verfügbar.

Migration von AlarmManager zu WorkManager

Wenn Ihre Anwendung AlarmManager für periodische Aufgaben verwendet, die keine präzise Zeitsteuerung erfordern, ziehen Sie eine Migration zu WorkManager in Betracht. PeriodicWorkRequest mit einem Mindestintervall von 15 Minuten ersetzt setRepeating, während WorkManager die Ausführung nach einem Neustart garantiert, Doze Mode handhabt und keine SCHEDULE_EXACT_ALARM-Berechtigung benötigt. Für zeitkritische Aufgaben (Wecker um 7 Uhr) bleibt AlarmManager die einzig richtige Wahl. Die optimale Strategie ist, AlarmManager nur für Alarme mit setAlarmClock zu verwenden und alle anderen Hintergrundaufgaben zu WorkManager zu verschieben.

Für periodische Aufgaben ohne Genauigkeitsanforderungen verwenden Sie WorkManager mit PeriodicWorkRequest. Für Aufgaben mit präziser Zeitsteuerung, die aber nicht kritisch für die Auslösung im Schlafmodus sind — verwenden Sie setExact ohne WAKEUP. Und nur für Alarme mit zwingendem Aufwecken — verwenden Sie setAlarmClock oder RTC_WAKEUP.

Es ist auch wichtig, die SCHEDULE_EXACT_ALARM-Berechtigung unter Android 12+ zu überprüfen. Wenn die Berechtigung nicht erteilt wurde, funktioniert setExact wie normales set (ungenau). Verwenden Sie AlarmManager.canScheduleExactAlarms() zur Überprüfung. Fehlt die Berechtigung, können Sie den Benutzer über Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM) auffordern, zu den Einstellungen zu gehen.

Behandlung von BOOT_COMPLETED zur Wiederherstellung von Alarmen

Ein kritisch wichtiges Merkmal von AlarmManager — alle geplanten Alarme werden nach einem Geräteneustart zurückgesetzt. Um sie wiederherzustellen, müssen Sie einen BroadcastReceiver deklarieren, der Intent.ACTION_BOOT_COMPLETED verarbeitet, und alle aktiven Alarme in der onReceive-Methode neu planen. Ohne dies verliert der Benutzer alle Erinnerungen nach dem Ausschalten und Wiedereinschalten des Telefons.

kotlin
class BootReceiver : BroadcastReceiver() {
    override fun onReceive(
        context: Context,
        intent: Intent
    ) {
        if (intent.action ==
            Intent.ACTION_BOOT_COMPLETED
        ) {
            val prefs =
                context.getSharedPreferences("alarms", 0)
            val savedTime =
                prefs.getLong("next_alarm", 0L)
            if (savedTime > System.currentTimeMillis()) {
                scheduleReminder(context, savedTime)
            }
        }
    }
}

In der Praxis bleibt AlarmManager die beste Lösung für Wecker-Anwendungen, Kalender, Medikamentenerinnerungen und alle Aufgaben, bei denen die Ausführungszeit für den Benutzer kritisch ist. Für alle anderen Hintergrundarbeitsszenarien sind WorkManager oder JobScheduler zu bevorzugen.

Bei der Wahl zwischen AlarmManager und WorkManager befolgen Sie diese Regel: Wenn der Benutzer ausdrücklich um eine Erinnerung um 14:30 Uhr gebeten hat — verwenden Sie AlarmManager mit setAlarmClock. Wenn die Aufgabe „ungefähr einmal pro Stunde“ ausgeführt werden soll — ist WorkManager mit PeriodicWorkRequest energieeffizienter und zuverlässiger.

Häufig gestellte Fragen

Was ist der Unterschied zwischen setExact und setAlarmClock?

Beide Methoden garantieren eine präzise Auslösung, aber setAlarmClock zeigt zusätzlich ein Alarmsymbol in der Statusleiste an und informiert das System, dass es sich um einen Benutzeralarm handelt. Unter Android 6+ hat setAlarmClock Immunität gegenüber dem Doze Mode, während setExact verzögert werden kann.

Wie verhält sich AlarmManager nach einem Geräteneustart?

Nach einem Neustart werden alle geplanten Alarme zurückgesetzt. Um sie wiederherzustellen, müssen Sie einen BroadcastReceiver für die Aktion BOOT_COMPLETED registrieren und alle Aufgaben in onReceive neu planen. Ohne dies wird nach dem Einschalten des Geräts kein Alarm ausgelöst.

Warum wird setRepeating unter Android 4.4+ nicht empfohlen?

Seit API 19 ist setRepeating ungenau geworden — das System kann Intervalle zur Energieeinsparung verschieben. Verwenden Sie stattdessen setExact mit manueller Neuplanung oder WorkManager mit PeriodicWorkRequest, der ein vorhersagbareres Verhalten bietet.

Welche Berechtigung wird für präzise Alarme unter Android 12+ benötigt?

Für setExact ist die Berechtigung SCHEDULE_EXACT_ALARM erforderlich, die der Benutzer in den Einstellungen erteilen oder widerrufen kann. Für setAlarmClock mit Uhrenanzeige wird USE_EXACT_ALARM verwendet, das bei der Installation aus dem Store automatisch erteilt wird.

Kann AlarmManager ohne PendingIntent verwendet werden?

Nein, AlarmManager arbeitet immer über PendingIntent. Dies kann PendingIntent.getBroadcast für BroadcastReceiver, PendingIntent.getService für Service oder PendingIntent.getActivity für Activity sein. Ohne PendingIntent kann das System das Ereignis nicht an die Anwendung zustellen.

Zusammenfassung

  • AlarmManager ist ein Android-Systemdienst zur Ausführung von Aufgaben zu präzisen Zeiten mit Geräteaufweckfunktion.
  • Vier Typen von Alarmen — ELAPSED_REALTIME, RTC, ELAPSED_REALTIME_WAKEUP und RTC_WAKEUP — decken verschiedene Szenarien ab.
  • setExact und setAlarmClock sind die einzigen Methoden für präzise Auslösung unter modernen Android-Versionen.
  • setRepeating ist unter Android 4.4+ veraltet — verwenden Sie setExact mit manueller Neuplanung.
  • SCHEDULE_EXACT_ALARM-Berechtigung ist unter Android 12+ für präzise Alarme erforderlich.
  • WorkManager oder JobScheduler sind für ungenaue Hintergrundaufgaben ohne Zeitvorgaben vorzuziehen.
  • Vergessen Sie nicht, BOOT_COMPLETED zu behandeln, um Alarme nach einem Geräteneustart wiederherzustellen.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch