The short answer
On Android, a third-party alarm that does not fire is usually being killed by manufacturer battery optimisation. Set the app to Unrestricted battery usage, enable Autostart where the manufacturer offers it, and grant the Alarms & reminders permission.
The universal fixes
- 1Settings → Apps → your alarm app → Battery → set to Unrestricted.
- 2Settings → Apps → Special app access → Alarms & reminders → allow your alarm app. Recent Android versions require this for exact alarms.
- 3Check the Alarm volume stream specifically by pressing a volume key and expanding the sliders.
- 4Confirm the app is not in any "sleeping" or "restricted" list your manufacturer maintains.
Manufacturer-specific settings
- Samsung: Settings → Battery and device care → Background usage limits. Remove the app from Sleeping apps and Deep sleeping apps. Also disable Adaptive battery if alarms fail intermittently.
- Xiaomi, Redmi and POCO: Settings → Apps → Manage apps → your app → enable Autostart, and set Battery saver to No restrictions. Also lock the app in the recents view so the task killer skips it.
- OnePlus and Oppo: Settings → Battery → Battery optimisation → set the app to Don’t optimise, and disable Deep optimisation and Sleep standby optimisation.
- Huawei: Settings → Battery → App launch → set the app to Manage manually and enable all three toggles.
What a well-built alarm app does instead
All of the above is a workaround for apps that keep their schedule inside their own process. An app that registers alarms with the system alarm manager and posts a foreground service when ringing does not depend on staying alive in the background, which removes most of this class of failure.
That is how Roosta is built on Android. The settings above are still worth applying. Manufacturer skins are unpredictable, but they should not be the difference between waking up and not.
Why Android is different from iPhone here
Android is far more aggressive than iOS about stopping apps from running in the background, and it has been getting more aggressive with each release. Doze mode suspends background work when the device has been still and unused for a while. App Standby Buckets demote apps you have not opened recently, giving them progressively fewer chances to do anything at all.
Both features exist for a good reason, and both are why an Android phone can sit in a drawer for a week and still have battery. They are also why an alarm app that keeps its own schedule can be perfectly reliable for the first fortnight and then quietly stop working, usually on a weekend when you had not opened it for a few days.
Android provides a specific mechanism for alarms that is exempt from all of this. An app that uses it is unaffected by Doze; an app that does not is at the mercy of it.
Fix 2: manufacturer battery managers
Stock Android battery optimisation is only half the story. Most manufacturers layer their own, more aggressive app killer on top, with its own separate settings that the standard Android battery screen does not reveal. These are the single most common cause of missed alarms on Android, and they vary by brand.
- 1Samsung: Settings, then Battery and device care, then Battery, then Background usage limits. Make sure the alarm app is not listed under Sleeping apps or Deep sleeping apps, and turn off Put unused apps to sleep.
- 2Xiaomi, Redmi and POCO: open Settings, then Apps, find the alarm app, and set Autostart on and Battery saver to No restrictions. Then open the recent-apps view and lock the app so it is not cleared.
- 3Huawei and Honor: Settings, then Battery, then App launch. Switch the app from Manage automatically to Manage manually and enable all three toggles, including Run in background.
- 4Oppo, Realme and OnePlus: Settings, then Battery, then set the app to Allow background activity or Don’t optimise, and check any Startup manager or Auto-launch list.
- 5Vivo: Settings, then Battery, then Background power consumption management, and allow high background power use for the app.
Fix 3: the alarms and reminders permission
From Android 12 onwards, setting an alarm for a precise time requires its own permission. Most alarm apps are granted it automatically, but it can be revoked, and a revoked permission means the app can only ask for an approximate time. An approximate alarm can drift by several minutes, which is the difference between a working alarm and one that fires after your train.
- 1Open Settings, then Apps, and choose the alarm app.
- 2Look for Alarms & reminders, which may sit under Special app access or Additional permissions depending on the manufacturer.
- 3Make sure it is allowed. If the option is absent, your Android version does not gate it and there is nothing to change.
Fix 4: Do Not Disturb and the alarm volume slider
Android gives alarms their own audio stream and their own volume slider, separate from ring and media volume. It is possible to have music at full volume and alarms at zero without ever noticing.
Do Not Disturb allows alarms by default, but unlike iOS this is an exception you can turn off. If you have ever built a custom Do Not Disturb schedule, check that schedule’s own exception list as well as the global one.
- 1Settings, then Sound & vibration, and check the Alarm volume slider specifically.
- 2Settings, then Notifications, then Do Not Disturb, and confirm Alarms is an allowed interruption.
- 3If you use a bedtime or sleep routine, open it and check its exceptions too. Routines can apply their own Do Not Disturb rules.
Fix 5: check what the app is actually doing
If you have applied everything above and alarms still fail intermittently, the problem is likely the app rather than the phone. Intermittent failure after idle days is the signature of an app holding its own schedule and being suspended.
Roosta hands the schedule to the Android alarm service the moment you save an alarm, using the mechanism that is exempt from Doze. That is why swiping the app away does not cancel an alarm, and why a phone that has been idle for days still rings. The manufacturer settings above are still worth applying, because manufacturer skins are unpredictable, but they should not be the difference between waking up and not.
Test it properly
Testing an alarm two minutes from now with the app open proves almost nothing, because the failure mode you are chasing only appears after the phone has been idle. A real test takes a night.
- 1Apply the battery settings above, then do not open the app again.
- 2Set an alarm for the next morning and leave the phone unplugged, screen off, untouched overnight. Doze needs stillness to engage, so a phone on a charger being handled is not a fair test.
- 3If it rings after a full night idle, it will keep ringing. If it does not, the app is holding its own schedule and no amount of battery configuration will fully fix that.

