Fairphone 4 home page loading laggy since Android 15 update

Even with nova launcher, I still have big issues. Phone reacting so slow when unlock - not always, but very often. Especially when some time passes. It is so terrible. I wish I could downgrade. Also Android often stops working during drive - not sure if this is related.

Did you ever try clearing the Gboard cache? You’ll probably need to do that regularly as it is not only used as keyboard app but also does the spell checking.

Thanks. Indeed it seems to help a lot. So I also bough SD Maid, which can clean cache of multiple apps at once.

In general it got better, but still has issus. Must went from Action launcher to Nova launcher, which also helped - even if I prefer Action launcher.

Sure I also checked if there is something unwanted running in background. And I restart the phone meanwhile quite often to ensure its fresh.

So I hope of an update, that somehow brings back the old performance.

1 Like

The laggy UI after upgrade to Android 15 might have the seem root cause like the FP4 (Android 15): Background apps being killed more aggressively issue. I’m posting my debugging session details below:

Details

Summary

After updating to Android 15, the Fairphone 4 UI is noticeably sluggish — app transitions stutter, input feels delayed, and switching between apps triggers multi-second hangs. Diagnostic data reveals the root cause: excessive swap thrashing due to disabled app compaction, leading to 2.4 million major page faults and over 1,100 high input latency events per 1,000 frames rendered. This is the same root cause as the aggressive background app killing issue reported in this thread.

Device Information

  • Device: Fairphone 4 (FP4)
  • Build: FP4.SREL.15.14.4
  • Android Version: 15 (API 35)
  • Security Patch: 2026-01-05
  • RAM: 7,684 MB (~7.5 GB)
  • SoC: Qualcomm Snapdragon 750G

Problem Description

Since upgrading from Android 13 to Android 15:

  • App transitions stutter and drop frames
  • Touch input feels delayed — taps sometimes take a moment to register
  • Switching between two apps (e.g., browser and authenticator) causes noticeable hang
  • Home screen icons take several seconds to appear after leaving an app
  • Overall UI responsiveness is noticeably degraded vs Android 13

Diagnostic Data

Frame Rendering Stats (dumpsys gfxinfo)

Total frames rendered: 1005
Janky frames: 61 (6.07%)
Janky frames (legacy): 131 (13.03%)
50th percentile: 17ms
90th percentile: 25ms
95th percentile: 34ms
99th percentile: 129ms ← should be <16ms for smooth 60fps
Number High input latency: 1149 ← exceeds total frame count!
Number Slow UI thread: 37
Number Slow issue draw commands: 26
Number Frame deadline missed: 61

1,149 high input latency events out of 1,005 frames — this means nearly every touch event is delayed. The 99th percentile frame time of 129ms is 8x the 16ms budget for 60fps.

Memory Pressure: Swap Thrashing (/proc/vmstat)

pswpin: 1,954,036 (swap pages read back into RAM)
pswpout: 4,641,720 (swap pages written out)
pgmajfault: 2,395,000 (major page faults requiring disk/swap I/O)

Over ~11 hours of uptime, the system performed 2.4 million major page faults — each one stalls the requesting thread while data is decompressed from zram. During UI interaction, these stalls cause the jank and input latency shown above.

Memory State

Total RAM: 7,684 MB
Used RAM: 3,252 MB (app PSS) + 769 MB (kernel)
Free RAM: 534 MB (truly free) + 4,021 MB (reclaimable cache)
ZRAM: 218 MB physical for 906 MB logical swap (4:1 compression)

While 4 GB is “reclaimable,” reclaiming it causes the very swap thrashing that degrades performance.

Top Memory Consumers

376 MB: system
292 MB: com.paypal.android.p2pmobile
283 MB: com.google.android.gm
282 MB: com.android.systemui
275 MB: me.proton.android.drive
272 MB: com.aspiro.tidal
262 MB: com.google.android.gms.persistent
250 MB: com.brave.browser
246 MB: com.android.launcher3
(24 apps, each 177-376 MB = ~5.8 GB total RSS)

Apps alone demand ~5.8 GB, exceeding the ~5.5 GB available after kernel/system overhead. The result is constant swapping.

Thermal State (not throttling)

Thermal Status: 0 (normal)
CPU0-5: 31°C, CPU6-7: 31°C, GPU: 32°C, Skin: 30°C

Temperatures are well within normal range — throttling is not the cause.

CPU (not overloaded)

CPU Governor: schedutil (all 8 cores)
Little cores (0-5): max 1.8 GHz
Big cores (6-7): max 2.2 GHz
CPU idle: 94%

CPU is mostly idle — the bottleneck is memory I/O, not compute.

Root Cause

The sluggishness and the aggressive background app killing share the same root cause:

App compaction is disabled (use_compaction=false)

$ adb shell device_config get activity_manager use_compaction
false

App compaction (Android’s CachedAppOptimizer) compresses the memory of cached/background apps in-place, reducing their RAM footprint without killing them. AOSP enables this by default. Fairphone’s Android 15 build has it disabled.

With compaction off:

  1. Cached apps occupy their full uncompressed memory
  2. RAM fills up faster → more data pushed to zram swap
  3. Switching apps triggers major page faults to decompress swap pages
  4. Page fault stalls block the UI thread → jank and input latency
  5. Eventually LMKD kills apps (the background killing issue)

The sluggishness and the background killing are two symptoms of the same misconfiguration.

Compaction statistics confirm it’s not running

$ adb shell dumpsys activity settings | grep -A5 "Compaction Stats"
Total Compactions Performed by profile: 0 some, 0 full
Total Memory Freed (KB): 0

Zero compactions performed — the feature is completely inactive.

Workarounds (via ADB, no root required)

Fix 1: Enable app compaction (primary fix)

adb shell device_config put activity_manager use_compaction true

This is the single most impactful change. It allows Android to compress cached apps in RAM instead of pushing them to swap.

Fix 2: Reduce animation scales (cosmetic, instant effect)

adb shell settings put global window_animation_scale 0.5
adb shell settings put global transition_animation_scale 0.5
adb shell settings put global animator_duration_scale 0.5

Halving animations makes transitions feel snappier. Can also be set via Settings > Developer Options > Animation scales.

Fix 3: Increase cached process limits

adb shell device_config put activity_manager max_cached_processes 64
adb shell device_config put activity_manager max_empty_time_millis 7200000000

Gives the system more headroom before killing cached processes.

Note: device_config settings may reset after reboot or Google Play Services config sync.

Suggested Fix for Fairphone

  1. Enable app compaction (use_compaction=true) — This is the default in AOSP and should be the default on FP4. Disabling it causes both UI sluggishness and aggressive background app killing.
  2. Review LMKD minfree thresholds — The low memory killer triggers too early for a 7.5 GB device, causing unnecessary app kills that then require expensive cold starts.
  3. Consider enabling PSI-based LMKD instead of legacy minfree-based killing, as PSI (Pressure Stall Information) is more accurate for detecting actual memory pressure vs. merely low free page counts.

Regression Information

  • Working smoothly: Android 13 on the same Fairphone 4
  • Sluggish: Android 15 (FP4.SREL.15.14.4)
  • Same hardware, same apps, same usage pattern

Related Threads