Recently I got a new phone and immediately had trouble with my notifications coming in on time. Emails, calendar alerts, even alarms were being delayed up to 15 minutes.
This isn’t the first time I’ve had problems like this. When Doze first came out back in Android 6 around 2017, it caused me a lot of grief, until I figured out how to whitelist apps and disable it. However, none of my well-known fixes and workarounds were effective.
A new sinister menace has arisen. It’s the Cached Apps Freezer, and it must die.
Before I wrote this post, I did a lot of research and found very little information. It’s clear that this feature and it’s negative side effects is not well know to the Android user community. The one exception was the Termux community and it’s dev agnostic-apollo, who had some excellent notes which I link to below.
The Cached Apps Freezer first appeared in Android 11 QPR3. It’s a feature that still seems half baked, like it’s in beta, but it’s being enabled by default on some devices. Notably, all Google Pixel devices have it enabled by default, but I’ve read that some Samsung devices also have it enabled by default.
So what does it do? In basic English, it periodically pauses and unpauses any app that isn’t in the foreground so that it can’t run. The process isn’t killed, but it can’t do anything until it gets unfrozen. If you watch your logcat, you will regularly see ActivityManager messages with the word “freeze” and “frozen”. It’s a power saving feature and you will find a plenty of ignorant users praising how it makes their battery last longer, but you won’t find any mention of the side effect of delaying notifications.
Note that you might have seen the term “frozen” and “freeze” before in relation to Android apps, where the app is still installed but disabled. This is not the same thing and is not related in any way.
If battery life is your primary concern, then feel free to turn this thing on. It definitely works, but don’t expect your notifications to come in right away. They might come in instantly, but most of the time they are going to be delayed up to 15 minutes.
So, what can you do about it if you want it disabled?
Unfortunately this feature has no user-facing control. Google didn’t create any kind of knobs or controls for the end-user. Maybe this is intentional, or maybe it’s just a half-baked feature. Either way, your only option is to disable it completely.
There are two ways to disable it:
Option 1: Enable Developer Options and disable “Suspend execution for cached apps”. You must reboot to apply the change.
Option 2: Run the following command on an adb shell, a terminal, or wherever, and then reboot: “device_config put activity_manager_native_boot use_freezer false”.
Below are a bunch of links with reference info.
https://source.android.com/docs/core/perf/cached-apps-freezer
https://www.xda-developers.com/hidden-changes-android-11-source-code/
https://www.reddit.com/r/termux/comments/13z7cpg/prevent_termux_from_closing/
Damn. The other day I received a notification from my local post app about something very important that has landed in my PO box when I had just arrived at home from work. I was curious and checked my emails for the exact time stamp of the delivery, turns out it was not “just now” like my Android notification implied but 12 minutes ago. Incidentally, 12 minutes ago was pretty much exactly when I cycled past my PO box being really disappointed that my package hasn’t been delivered yet, or so I thought at the time. Had to go back when I could’ve just picked it up on the original trip.
Stupid me thought it was the “optimised” per-app battery setting vs “unrestricted” that would control this.
Thanks for pointing this out OP!
That controls Doze, which can also potentially delay notifications.
The Freezer works entirely separate and in addition to Doze. You would need to disable both.
The nice thing about Doze these days is that you can whitelist individual apps rather than turning the whole thing off. That’s what setting the battery to “not optimized”/“unrestricted” does under the hood.