A post was merged into an existing topic: FP4 (Android 15): Background apps being killed more aggressively
To make it clear: this topics not only on fairphone 5 and it seems still not to be fixed.
I believe this issue is present in my FP5. I am often not able to switch back from an authenticator or a banking app to continue in the authentication flow started in an app. There is general slowness in opening the screen lock (like 10 sec) or switching between apps. Camera app may hang completely on a static picture. This and other hangups often reboot the phone automatically, or I have to perform that manually. Everything may work fine after reboot for awhile.
I connected to the phone with adb. According to top there was at least 700 000K of free memory. CPU seemed to be mostly idle. However, when I read to logs with logcat, there is a continuous stream of lmkd lines in the logs. No lmkd lines were present after a reboot.
Are these a sign of Android killing background jobs?
Kill ‘com.qualcomm.qti.workloadclassifier’ (21544), uid 1110176, oom_score_adj 500 to free 70784kB rss, 50380kB swap; reason: low watermark is breached and thrashing (90%)
Kill ‘.pasr’ (20849), uid 1110091, oom_score_adj 500 to free 63148kB rss, 52516kB swap; reason: low watermark is breached and thrashing (969%)
Kill ‘android.process.acore’ (7428), uid 10043, oom_score_adj 965 to free 66376kB rss, 41620kB swap; reason: min watermark is breached
Kill ‘com.qti.phone’ (16780), uid 1110123, oom_score_adj 500 to free 85248kB rss, 47788kB swap; reason: min watermark is breached and thrashing (10%)
Kill ‘com.qti.phone’ (15985), uid 1110123, oom_score_adj 500 to free 85348kB rss, 47600kB swap; reason: min watermark is breached and thrashing (12%)
Kill ‘.pasr’ (22723), uid 1110091, oom_score_adj 500 to free 69036kB rss, 50296kB swap; reason: min watermark is breached and thrashing (129%)
Kill ‘com.fp5.iris’ (15528), uid 1101000, oom_score_adj 500 to free 81280kB rss, 48008kB swap; reason: min watermark is breached and thrashing (13%)
Kill ‘com.qti.phone’ (12913), uid 1110123, oom_score_adj 500 to free 83876kB rss, 47520kB swap; reason: min watermark is breached and thrashing (14%)
Kill ‘com.qti.phone’ (16058), uid 1110123, oom_score_adj 500 to free 84796kB rss, 47648kB swap; reason: min watermark is breached and thrashing (15%)
Kill ‘com.qti.phone’ (12478), uid 1110123, oom_score_adj 500 to free 77608kB rss, 47740kB swap; reason: min watermark is breached and thrashing (16%)
Kill ‘com.qti.phone’ (13039), uid 1110123, oom_score_adj 500 to free 85492kB rss, 47372kB swap; reason: min watermark is breached and thrashing (17%)
Kill ‘com.qti.phone’ (15283), uid 1110123, oom_score_adj 500 to free 83740kB rss, 47816kB swap; reason: min watermark is breached and thrashing (18%)
Kill ‘com.google.android.cellbroadcastreceiver’ (11558), uid 1110192, oom_score_adj 905 to free 94976kB rss, 47728kB swap; reason: min watermark is breached and thrashing (20%)
Kill ‘com.qti.phone’ (11610), uid 1110123, oom_score_adj 500 to free 81572kB rss, 47476kB swap; reason: min watermark is breached and thrashing (21%)
Kill ‘com.fp5.iris’ (11094), uid 1101000, oom_score_adj 500 to free 76632kB rss, 47812kB swap; reason: min watermark is breached and thrashing (22%)
Kill ‘com.google.android.gms’ (14267), uid 1110104, oom_score_adj 905 to free 117484kB rss, 46212kB swap; reason: min watermark is breached and thrashing (24%)
Kill ‘com.fp5.iris’ (12603), uid 1101000, oom_score_adj 500 to free 79592kB rss, 47884kB swap; reason: min watermark is breached and thrashing (25%)
Kill ‘com.qti.phone’ (14234), uid 1110123, oom_score_adj 500 to free 81856kB rss, 47644kB swap; reason: min watermark is breached and thrashing (26%)
Kill ‘com.qti.phone’ (11357), uid 1110123, oom_score_adj 500 to free 82848kB rss, 47556kB swap; reason: min watermark is breached and thrashing (27%)
Kill ‘com.qti.phone’ (17783), uid 1110123, oom_score_adj 500 to free 83128kB rss, 47716kB swap; reason: min watermark is breached and thrashing (28%)
Kill ‘com.google.android.cellbroadcastreceiver’ (10867), uid 1110192, oom_score_adj 905 to free 92224kB rss, 47572kB swap; reason: min watermark is breached and thrashing (30%)
Kill ‘com.fp5.iris’ (17701), uid 1101000, oom_score_adj 500 to free 82444kB rss, 48084kB swap; reason: min watermark is breached and thrashing (33%)
Kill ‘com.qti.phone’ (13274), uid 1110123, oom_score_adj 800 to free 73600kB rss, 48940kB swap; reason: min watermark is breached and thrashing (35%)
Kill ‘com.google.android.apps.photos’ (10049), uid 10118, oom_score_adj 905 to free 101744kB rss, 47508kB swap; reason: min watermark is breached and thrashing (36%)
Kill ‘com.google.android.apps.docs’ (10044), uid 10150, oom_score_adj 905 to free 135140kB rss, 45552kB swap; reason: min watermark is breached and thrashing (37%)
Kill ‘android.process.acore’ (15871), uid 10043, oom_score_adj 700 to free 88760kB rss, 48384kB swap; reason: min watermark is breached and thrashing (38%)
Kill ‘com.qti.phone’ (16947), uid 1110123, oom_score_adj 500 to free 85764kB rss, 47672kB swap; reason: min watermark is breached and thrashing (4%)
Kill ‘com.android.providers.partnerbookmarks’ (11627), uid 10086, oom_score_adj 700 to free 73152kB rss, 46340kB swap; reason: min watermark is breached and thrashing (41%)
Kill ‘com.qti.phone’ (17503), uid 1110123, oom_score_adj 500 to free 82780kB rss, 47756kB swap; reason: min watermark is breached and thrashing (42%)
Kill ‘com.fp5.iris’ (8882), uid 1101000, oom_score_adj 800 to free 47164kB rss, 41680kB swap; reason: min watermark is breached and thrashing (45%)
Kill ‘com.google.android.cellbroadcastreceiver’ (9214), uid 1110192, oom_score_adj 905 to free 55040kB rss, 38272kB swap; reason: min watermark is breached and thrashing (480%)
Kill ‘com.google.android.cellbroadcastreceiver’ (9389), uid 1110192, oom_score_adj 905 to free 50648kB rss, 41272kB swap; reason: min watermark is breached and thrashing (49%)
Kill ‘com.qti.phone’ (16641), uid 1110123, oom_score_adj 500 to free 83872kB rss, 47760kB swap; reason: min watermark is breached and thrashing (7%)
Kill ‘com.urbandroid.sleep’ (9633), uid 10223, oom_score_adj 905 to free 170880kB rss, 43540kB swap; reason: min watermark is breached and thrashing (74%)
Kill ‘com.google.android.as’ (8279), uid 1110096, oom_score_adj 100 to free 53312kB rss, 46000kB swap; reason: min watermark is breached and thrashing (76%)
Kill ‘com.android.settings’ (18196), uid 1000, oom_score_adj 905 to free 77724kB rss, 35900kB swap; reason: min watermark is breached and thrashing (87%)
Kill ‘com.qti.phone’ (16726), uid 1110123, oom_score_adj 500 to free 85488kB rss, 47504kB swap; reason: min watermark is breached and thrashing (9%)
Kill ‘com.android.settings’ (8204), uid 1000, oom_score_adj 955 to free 94068kB rss, 41708kB swap; reason: min watermark is breached even after kill
that looks like output from the oomkiller, which kills off processes to free up memory when the system runs out.
I noticed a similar thing the other day. What’s not clear is why these processes are being killed or why many of them are running (in my case I was seeing names appear of apps that I hadn’t used for some hours and the same app was appearing and apparently being killed multiple times despite not even being open, and in your case arcore appears in the list which is a mixed reality service only used in some games and not supported on the Fairphone anyway). I suspect that something is very wrong in the configuration used to build the Fairphone ROM (things like process killing thresholds are configurable by the ROM builder).
That is a good summary of my thoughts.
I can understand that low memory killer may occasionally need to intervene. But I think I do not have anything resource intensive running in my phone, and at least no single app seems to use a large amount of memory.
I am involved with an Android app, which has received end user reports of similar situation (quite likely using other than Fairphones). These end users are forced to authenticate multiple times before being able to use the app. I suspect that it is killed due to low memory and that resets the authentication flow, which I am able to produce in my phone.
Interestingly, I also learned that Firebase Crashlytics, which is a common crash analysis tool for Android apps, does not receive a report of crashes caused by lmkd. I wonder if there is any statistics of how common this problem is. Would it be possible, say, to enable some telemetry which would give Fairphone more data on this issue?
Ok so I got inspired by @ms912462 and setup adb to monitor my memory and the kill events. I’ve found interesting things.
First of all, I haven’t posted in this thread yet, but in this one that has been merged here: Apps reloading when switching apps
To be short, I also experience a lot of app kills in the background, especially with Spotify and my keyboard (Swiftkey, but I tried using gboard with the same results).
I suspected memory issues since the beginning, but every time I open the My Fairphone app I see that my memory is around 50-70%, so nothing to see here apparently.
I came up with a scenario which triggers the kill 90% of the time:
- Connect Bluetooth headphones (in my case: Fairbuds)
- Open Spotify, launch a track
- Turn the screen off, then double click on the power button to open camera
- Spotify gets killed, music stops
So I plugged my phone to my computer and started investigating.
adb shell top
Running adb shell top -d 1 -s 1 -o %MEM -o ARGS -m 30, I started measuring the consumption app by app in real time.
First of all, in the headers I could see the memory and swap values: my memory is almost full all the time!
Example:
Mem: 5410548K total, 5313232K used, 97316K free, 1084K buffers
Swap: 3145724K total, 732328K used, 2413396K free, 2049420K cached
- Memory: 5.4Gb total, 0.1Gb free → 98% used
- Swap: 3.1Gb total, 2.4Gb free → 33% used
Does that mean that all my processes go to swap and physical memory is always saturated? Does Android really need 6Gb for itself?
And so why is the My Fairphone app saying it’s not full at all? Probably because the app looks at the memory and swap metrics to give the information.
Interesting processes to look at in the list anyway, like Outlook taking around 5% of memory (and I haven’t even launched it today!), or Facebook, or Instagram (which I almost never use). I uninstalled some of them ![]()
adb logcat
Running adb logcat | grep kill, I could watch the kill events and ended up with similar results than @ms912462
I ran my scenario and could watch live that indeed, Spotify (and a lot of other apps including Swiftkey) were killed.
Sample:
lowmemorykiller: Kill 'com.spotify.music' (7414), uid 10232, oom_score_adj 200 to free 335864kB rss, 28052kB swap; reason: min watermark is breached even after kill
lowmemorykiller: Kill 'com.google.android.apps.messaging' (9629), uid 10116, oom_score_adj 925 to free 163988kB rss, 34904kB swap; reason: low watermark is breached
lowmemorykiller: Kill 'com.android.musicfx' (8032), uid 10062, oom_score_adj 915 to free 61624kB rss, 38792kB swap; reason: low watermark is breached
lowmemorykiller: Kill 'com.touchtype.swiftkey' (10884), uid 10218, oom_score_adj 200 to free 248408kB rss, 37452kB swap; reason: min watermark is breached even after kill
I noticed a lot of blocks like this one:
lowmemorykiller: thrashing: 0% thrashing_limit: 30%
lowmemorykiller: Not killing for medium pressure event polling check
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 2% thrashing_limit: 30%
lowmemorykiller: No processes to kill with adj score >= 701
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 2% thrashing_limit: 30%
lowmemorykiller: No processes to kill with adj score >= 701
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 4% thrashing_limit: 30%
lowmemorykiller: No processes to kill with adj score >= 701
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 6% thrashing_limit: 30%
lowmemorykiller: No processes to kill with adj score >= 701
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 7% thrashing_limit: 30%
lowmemorykiller: No processes to kill with adj score >= 701
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 8% thrashing_limit: 30%
lowmemorykiller: No processes to kill with adj score >= 701
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 9% thrashing_limit: 30%
lowmemorykiller: No processes to kill with adj score >= 701
lowmemorykiller: medium pressure event polling check
lowmemorykiller: thrashing: 9% thrashing_limit: 30%
lowmemorykiller: Not killing for medium pressure event polling check
Here is a complete and exhaustive example of what the logs showed when I opened the camera app:
12-13 18:52:34.491 603 603 D lowmemorykiller: medium pressure event triggered
12-13 18:52:34.493 603 603 I lowmemorykiller: Kill 'com.reddit.frontpage' (21518), uid 10252, oom_score_adj 935 to free 216568kB rss, 37776kB swap; reason: device is in direct reclaim and low on memory
12-13 18:52:34.536 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.536 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.538 603 603 I lowmemorykiller: Kill 'com.whatsapp' (21516), uid 10220, oom_score_adj 925 to free 212432kB rss, 37284kB swap; reason: min watermark is breached even after kill
12-13 18:52:34.576 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.577 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.577 603 603 D lowmemorykiller: Not killing for medium pressure event polling check
12-13 18:52:34.677 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.677 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.679 603 603 I lowmemorykiller: Kill 'android.process.acore' (21683), uid 10055, oom_score_adj 915 to free 83956kB rss, 41184kB swap; reason: low watermark is breached
12-13 18:52:34.704 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.704 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.706 603 603 I lowmemorykiller: Kill 'system:ui' (21706), uid 1000, oom_score_adj 905 to free 123100kB rss, 38288kB swap; reason: min watermark is breached even after kill
12-13 18:52:34.742 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.743 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.745 603 603 I lowmemorykiller: Kill 'com.touchtype.swiftkey' (20659), uid 10218, oom_score_adj 200 to free 158076kB rss, 33476kB swap; reason: min watermark is breached even after kill
12-13 18:52:34.800 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.800 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.804 603 603 I lowmemorykiller: Kill 'com.google.android.apps.messaging:rcs' (11027), uid 10116, oom_score_adj 200 to free 99492kB rss, 40272kB swap; reason: min watermark is breached even after kill
12-13 18:52:34.834 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.834 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.835 603 603 D lowmemorykiller: Not killing for medium pressure event polling check
12-13 18:52:34.938 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:34.938 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:34.938 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.039 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.039 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.039 603 603 D lowmemorykiller: Not killing for medium pressure event polling check
12-13 18:52:35.139 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.140 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.140 603 603 D lowmemorykiller: Not killing for medium pressure event polling check
12-13 18:52:35.242 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.242 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.243 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.343 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.343 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.343 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.444 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.444 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.445 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.535 603 603 D lowmemorykiller: medium pressure event triggered
12-13 18:52:35.535 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.536 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.636 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.637 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.637 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.737 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.738 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.738 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.838 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.839 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:35.939 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:35.940 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:35.940 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:36.043 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:36.044 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:36.044 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:36.144 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:36.145 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:36.145 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:36.245 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:36.246 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:36.247 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:36.347 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:36.347 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:36.348 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:36.448 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:36.449 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:36.449 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
12-13 18:52:36.549 603 603 D lowmemorykiller: medium pressure event polling check
12-13 18:52:36.550 603 603 D lowmemorykiller: thrashing: 0% thrashing_limit: 30%
12-13 18:52:36.551 603 603 D lowmemorykiller: No processes to kill with adj score >= 701
Conclusion
I don’t really know what to do from now on. Any more advanced developers having any clue?
Update from my previous post: I tried the same things with 2 other phones, which behave normally (no Spotify or keyboard kills, multitasking ok)
Samsung Galaxy S21
RAM was at 98%, so pretty similar! Swap was pretty full too.
When launching the camera, I saw some kills like on the FP5. I also saw the adj logs, and I noticed that the threshold value is different (850 here, vs 701 on FP5).
Is this a constructor configuration? Maybe FP can tweak this so that the memory manager doesn’t kill the apps too early?
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
ChimeraAggressivePolicyHandler: kill complete: killed 2 apps, freed 200680 KB
ChimeraAggressivePolicyHandler: kill complete: killed 3 apps, freed 287548 KB
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
lmkd : No processes to kill with adj score >= 850
Google Pixel 8
RAM was not saturated, around 1Gb free out of 8Gb. When launching the camera I saw some kill logs too. But not always.
And there were no adj logs here.
I lowmemorykiller: Kill 'com.google.android.aicore' (24534), uid 10172, oom_score_adj 999 to free 65164kB rss, 43312kB swap; reason: low watermark is breached
I lowmemorykiller: Kill 'com.google.android.apps.weather' (26258), uid 10125, oom_score_adj 999 to free 75928kB rss, 59756kB swap; reason: low watermark is breached
E lowmemorykiller: process_mrelease 26258 failed: No such process
I lowmemorykiller: Kill 'com.android.providers.calendar' (22622), uid 10085, oom_score_adj 999 to free 65988kB rss, 42620kB swap; reason: low watermark is breached
I lowmemorykiller: Kill 'com.google.android.apps.turbo:ssb' (26864), uid 10134, oom_score_adj 995 to free 65080kB rss, 43292kB swap; reason: low watermark is breached
I lowmemorykiller: Kill 'com.google.android.apps.turbo:aab' (23236), uid 10134, oom_score_adj 995 to free 68568kB rss, 89388kB swap; reason: low watermark is breached
I lowmemorykiller: Kill 'com.google.android.flipendo' (18442), uid 10249, oom_score_adj 995 to free 61776kB rss, 41216kB swap; reason: low watermark is breached
I lowmemorykiller: Kill 'com.google.android.setupwizard' (27130), uid 10155, oom_score_adj 985 to free 66396kB rss, 41460kB swap; reason: low watermark is breached
I lowmemorykiller: Kill 'com.whatsapp' (24679), uid 10276, oom_score_adj 985 to free 69868kB rss, 69824kB swap; reason: low watermark is breached
E lowmemorykiller: process_mrelease 24679 failed: No such process
I lowmemorykiller: Kill 'com.google.android.apps.wear.companion:persistent' (26431), uid 10291, oom_score_adj 985 to free 68736kB rss, 47416kB swap; reason: low watermark is breached
I lowmemorykiller: Kill 'com.google.android.apps.tips' (26759), uid 10168, oom_score_adj 975 to free 73536kB rss, 54896kB swap; reason: low watermark is breached
Hi, thanks a lot for your debugging.
I’m not a developer or anything but what I learned during my journey FP forced me into:
If Android is running low on memory it tries to free it by killing apps based on their oom_score. The higher the score of an app, the less problematic is a kill. Here are categories from high score to low score (from developer.android.com)
In the Pixel’s log there is for example:
I lowmemorykiller: Kill ‘com.google.android.apps.weather’ (26258), uid 10125, oom_score_adj 999 to free 75928kB rss, 59756kB swap; reason: low watermark is breached
The pixel killed the background activities of the weather app. No one will realize that → oom_score of 999 → normal behaviour
Now let’s compare the FP5: there are several kills with an oom_score of 200. For example:
12-13 18:52:34.745 603 603 I lowmemorykiller: Kill 'com.touchtype.swiftkey' (20659), uid 10218, oom_score_adj 200 to free 158076kB rss, 33476kB swap; reason: min watermark is breached even after kill
It killed (among others) your keyboardapp which is considered as perceptible to the user (just as spotify). With an oom-score of 200 it is one of the last emergency steps android takes before killing foregroundapp.
An overview of what kind of apps belong to which oom_score can be found at the bottom of this page. For example the oom of 200:
// This is a process only hosting components that are perceptible to the
// user, and we really want to avoid killing them, but they are not
// immediately visible. An example is background music playback.
static final int PERCEPTIBLE_APP_ADJ = 200;
My conclusion is, that the FP5 is under heavy memory pressure and android is trying anything to avoid killing the foreground-app. Of course there is no room for multitasking then.
——
I had a discussion with Gemini about my personal FP5 logs and it suggested that there is a memory leak in the surfaceflinger and/or camera driver of the FP. This can as well just be Gemini hallucinating because it hasn’t got a good answer, so please don’t take it for granted. I just wanted to mention it because you stated that you can see app-kills after starting your camera app. Also my “Android System” is always consuming about 1.5-3Gb of memory which seems rather high to me if the phone already has to kill my music player out of memory pressure.
For me debugging ends here as we can anyways not do anything about the issue. As Fairphone is not willing push their software-suppliers at T2Mobile to solve it, I will try to reset the phone in near future and switch to /e/ afterwards.
Hmm yeah, it sounds to me like FP have got something wrong in the memory configuration for their Android 15 images, so the system thinks it desperately needs to oom-kill stuff when there’s actually still a ton of spare RAM. I think all models have the same amount of RAM, so I wonder why not everyone is affected?
I’ve also been facing this issue for a few months. After a forum suggestion I installed dontkillmyapp which suggested potential solutions for this behavior.
I tried one sucessfully which requires to enable developer options and adb debugging and then run: dumpsys deviceidle disable
After disabling the dose mode I didn’t notice any apps getting killed and could enjoy music with spotify while buying something on my phone and completing the 3DS challenge in my banking app, something which had become totally impossible before.
I’m unsure if it could help some of you or even Fairphone understand the underlying issue as Dose mode is indeed a battery optimization feature but shouldn’t kill app as far as I understand the doc.
Note that this settings resets itself at reboot
Hey, I’m afraid I don’t have a solution but just wanted to say I have the same issue with my Fairphone 5. Apps like Spotify and maps just shutting down when I go out of them or go into other apps. Seems to have gotten a lot worse lately. Hope Fairphone address this soon!
Thanks for the very insightful logs! So at least there’s no magic happening. It’s just plain old OOM.
Getting the amount of free RAM is tricky. Usually everything not needed by apps is used for caching/prefetching files. That should be oom score 1 million
So it’s unclear to me whether there is actual memory pressure or not.
If disabling dose mode works around this issue, I have an idea. In dose mode, you’d want to kill as much apps as possible. How to do that? Sooo… what if you started a process with OOM score 1 and that process would claim 5 gigs of RAM? Wouldn’t that explain a lot? So maybe there’s just some misconfiguration of the dose mode helper?
Also just chiming in to note my experience with this on FP5.
Randomly killing Spotify when it’s the only app open but the screen is off, switching between 2 apps (e.g. YouTube and Firefox) and having the other one die for the 10 seconds I was in the other app (so I have to watch more ads on YouTube for example).
It feels like the software experience of this phone has been a constant uphill battle, can’t recommend it to people because of that unfortunately.
Will be installing the new update today to see if that fixes anything (the launcher, wallpaper reset and app switcher fixes will be nice at least, provided they work and don’t break something else).
Just noting my experience;
Phone has gotten a lot slower with A15. The most annoying bug is the closing of apps for no apparent reason. Spotify but a radio app I use as well to play music both get shut off while I’m not even touching my phone. Its completely inconsistent as well, sometimes it doesn’t happen for quite a while and other times it happens multiple times within 1 song. This is becoming a huge frustration, is there a way to move back to android 14? Since apparently this has been an issue since august… (I updated to A15 very late and recommended friends not to do the update at all unfortunately)
OK, my phone has been acting muuuch better since yesterday. I still sometimes see app reloads, but much less frequently, and navigating between apps generally feels much snappier too. Two things happened that might have helped: I installed the latest update, and I also enabled Memory Usage Profiling in the developer settings. I did the latter first without expecting much, and soon afterwards the update notification appeared and I installed that. So I’m not sure which is more relevant. But something’s definitely better.
My theory for enabling the memory usage profiling was that the root of the problem seems to be related to the system not having an accurate measure of how much RAM is really available. And I thought maybe the profiling would give something the necessary kick to begin measuring it correctly again.
Ok so I have tried and failed to really improve this based on the feedback in the thread. I feel like I am clutching at straws but is there any point in trying a factory reset to clean things up or is this simply a failure on fairphones software development for android 15?
I love the hardware and the phone was basically perfect before this upgrade but this is beyond any reasonable period to fix.
I think there’s a decent chance a factory reset will work. I’m assuming there’s only a minority of us affected, or Fairphone would be paying more notice. And the hardware should also be identical, which only leaves differences in stored data. If it doesn’t help, it could also be worth skipping the step where Google restores everything from its cloud backup, because whatever bad data might be causing this could be there too ![]()
As I mentioned above, things are better on my phone currently, but if it goes bad again my plan is a factory reset, or switch to LineageOS, which I have very good past experience with (but banking apps will be a pain).
If your mind is set and the wiping of user data and the resulting aftermath are clear and accepted as a consequence, at least the factory reset itself will be done easily and quickly.
But please keep in mind …
If the OS upgrade was done in-place via the updater, a factory reset will not rule out the upgrading process as a possible source of issues.
There is a point in trying a factory reset or, more cleanly, an install from scratch if there are users out there with the same phone and OS version, but without the issue(s).
Hello, newcomer to Fairphone and FP5.
Posted a topic a few days ago on AccuBattery being seemingly killed in the background (even though I’ve set it as unrestricted), that might be related to this.
I also wanted to share that I am also experiencing this, and can be really annoying when logging into services and getting MFA tokens between apps and 1Password to have the app restarted every time I switch back to it.
Is there any solution at this point?