Surya Pratap Singh
AI Engineer & Founder
Android Performance Optimization Guide: From Lag to Silk
Android Performance Optimization Guide: From Lag to Silk
Android provides developers and power users incredible freedom. You can tweak the kernel scheduler, swap out the GPU driver, or disable entire subsystems. But with that freedom comes the risk of making things worse.
I have spent the last four years optimizing Android devices—from a OnePlus 7T to a Pixel 9 Pro Fold—and this guide consolidates every tweak that actually makes a measurable difference. No snake oil, no placebo settings. Just benchmarks and concrete steps.
1. Developer Options: The First Layer
Developer Options is the gateway to Android's performance tuning. Enable it by tapping Build Number seven times in Settings → About Phone.
Animation Scaling
This is the oldest trick in the book, and still the most effective for perceived performance. Animations in Android are rendered by the SurfaceFlinger service, and their duration directly impacts how fast the UI feels:
| Setting | Default | Recommended |
|---|---|---|
| Window animation scale | 1.0x | 0.5x or Off |
| Transition animation scale | 1.0x | 0.5x or Off |
| Animator duration scale | 1.0x | 0.5x or Off |
Setting all three to 0.5x halves the animation duration without eliminating them entirely—apps still feel smooth, just snappier. Setting to Off eliminates animations entirely, which some power users prefer for raw speed.
Background Process Limits
Modern Android is aggressive with background process management. On devices with 6GB or less RAM, this is sensible. But if you have 12GB+ (common on flagships in 2026), suspending apps is actively harming performance—the CPU has to constantly reload app state from storage instead of keeping it hot in memory.
Navigate to Developer Options → Background process limit. The default is Standard limit, which kills processes once they pass a hidden threshold based on free memory and "importance" score. I recommend:
- 8GB+ RAM:
No background processesis too extreme (breaks notifications). TryAt most 4 processesfor a middle ground, or leave atStandard limitbut disable battery optimization per-app. - 12GB+ RAM: Set to
No limit. Android will manage via LMK (Low Memory Killer) instead, which only kills when memory is genuinely needed.
Suspend Execution for Cached Apps
This is a hidden performance killer. On Android 12+, the system can "suspend" cached apps using SIGSTOP, freezing their execution entirely. When you switch back to a suspended app, it must thaw and re-render, causing a visible delay.
Go to Developer Options → Suspend execution for cached apps → Select Disabled.
This one tweak alone can shave 200-400ms off app resume times on Pixel and OnePlus devices.
2. GPU Rendering Tuning
Most Android UI rendering goes through OpenGL ES or Vulkan. These settings force the GPU to work harder for smoother output.
Force 4x MSAA
Multi-Sample Anti-Aliasing (MSAA) smooths jagged edges in 3D-rendered content. Forcing 4x MSAA via Developer Options → Force 4x MSAA applies it globally, including to apps that don't request it.
Trade-off: ~15% higher GPU power consumption. On a 5000mAh battery, this costs about 30-45 minutes of screen-on time. Worth it if you play games or use design tools; skip it if you only browse social media.
Disable HW Overlays
Hardware overlays allow the GPU to composite multiple layers independently. In theory, this is efficient. In practice, some apps (especially on OEM skins like MIUI or ColorOS) push too many overlay layers, causing the GPU to stall.
Enable Disable HW overlays in Developer Options to force the GPU to use the main compositing path. This increases GPU load slightly but eliminates a common source of micro-stutters in notification shade and quick settings pulldown.
Note: This setting resets on reboot on most devices. Use ADB to make it persistent:
adb shell settings put global overlay_display_devices 1 adb shell settings put global force_gpu_rendering 1
Profile GPU Rendering
Enable Profile GPU rendering → On screen as bars in Developer Options. This overlays real-time bar charts showing how long each frame takes to render. Green bars mean 16ms or less (60fps). Red bars mean dropped frames. Use this to identify which specific app or screen is causing jank.
3. ADB Bloatware Removal
Pre-installed apps (bloatware) consume RAM, CPU cycles, and storage. Even if you never open them, their services run in the background. The safest removal method is pm uninstall -k --user 0 via ADB, which removes the app only for your user profile without rooting.
# List all packages (including system) adb shell pm list packages # Remove Facebook services (example) adb shell pm uninstall -k --user 0 com.facebook.katana adb shell pm uninstall -k --user 0 com.facebook.services adb shell pm uninstall -k --user 0 com.facebook.system # Remove OEM bloat (Samsung example) adb shell pm uninstall -k --user 0 com.samsung.android.bixby.wakeup adb shell pm uninstall -k --user 0 com.samsung.android.kgclient # Remove Google apps you don't use adb shell pm uninstall -k --user 0 com.google.android.apps.maps adb shell pm uninstall -k --user 0 com.google.android.apps.photos adb shell pm uninstall -k --user 0 com.google.android.apps.magazines
Safety checklist before uninstalling:
- Never uninstall
com.android.*orcom.google.android.gms(Google Play Services) - Do not remove the launcher, keyboard, or Settings app
- Create a backup list of removed packages for easy restoration:
adb shell pm list packages | sort > before.txt # ... after removals ... adb shell pm list packages | sort > after.txt diff before.txt after.txt > removed_packages.txt - To restore a package:
adb shell cmd package install-existing <package.name>
On a typical flagship, removing 15-20 bloatware packages frees 1.5-3GB of storage and 500MB-1GB of RAM that would otherwise be occupied by cached services.
4. Kernel Governors and I/O Schedulers
This section requires root access. If you are rooted (Magisk or KernelSU), you can switch CPU governors for dramatically different performance profiles.
CPU Governors
The governor controls how the CPU scales frequency. The default on most devices is schedutil, which works well for battery but can lag under sudden load spikes.
| Governor | Behavior | Best For |
|---|---|---|
performance | Locks all cores at max frequency | Benchmarking, gaming |
schedutil | Scales based on scheduler utilization | Default, balanced |
conservative | Slow to scale up, quick to scale down | Battery saving |
blu_schedutil | Modified schedutil, faster ramp-up | Daily driver (recommended) |
# Using EX Kernel Manager or FKM app, or via ADB shell with root: echo "blu_schedutil" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo "blu_schedutil" > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor echo "blu_schedutil" > /sys/devices/system/cpu/cpu7/cpufreq/scaling_governor
I/O Scheduler
The I/O scheduler determines how read/write requests are queued to storage. The default is often cfq or mq-deadline. For UFS 3.1/4.0 storage (standard on 2024+ flagships), kyber offers the lowest latency:
echo "kyber" > /sys/block/sda/queue/scheduler
GPU Governor
On Qualcomm devices, the GPU governor defaults to msm-adreno-tz. Switching to performance locks the GPU at max frequency, eliminating rendering jank at the cost of ~20% higher power draw:
echo "performance" > /sys/class/kgsl/kgsl-3d0/devfreq/governor
5. Thermal Throttling Mitigation
Thermal throttling is the #1 cause of sustained performance loss in modern phones. A Snapdragon 8 Gen 4 or Dimensity 9400 can sustain peak performance for roughly 90-120 seconds before the temperature sensor trips and frequencies are slashed by 30-40%.
Without Root
The best non-root mitigation is passive cooling:
- Remove the case during gaming or heavy use
- Use a magnetic cooler (the Peltier-based phone coolers genuinely work)
- Lower brightness to reduce display power draw (display is a major heat source)
- Use "Performance" mode in your OEM's game toolbox (OnePlus Game Space, Samsung Game Booster)
With Root (Magisk)
For rooted devices, use FKM (Franco Kernel Manager) or EX Kernel Manager to raise the thermal throttle threshold:
# List thermal zones cat /sys/class/thermal/thermal_message/* # Raise throttle temp (example values - vary by device) echo "48000" > /sys/class/thermal/thermal_message/temperature_limit # 48°C instead of 42°C # Or use a custom kernel that removes throttling entirely # (e.g., Kirisakura, Sultanxda kernels)
Warning: Raising thermal limits can damage battery health over time. Lithium-ion cells degrade fastest above 45°C. Use this only for short gaming sessions, not as a daily configuration.
6. Custom Kernels
For the ultimate performance optimization, flash a custom kernel. This replaces your device's Linux kernel with one tuned for performance, often featuring:
- Reduced scheduler latency: Lower
sched_wakeup_granularityfor snappier app switching - GPU overclock: Up to 15% higher GPU clock speeds
- Memory management: ZRAM tuning, swap priority adjustment, KSM (Kernel Same-page Merging)
- TCP congestion control: BBR vs Westwood for faster network throughput
Popular custom kernels by chipset:
- Snapdragon 8 Gen 3/4: Kirisakura, Sultanxda, Weeb
- Tensor G3/G4: Proton Kernel, Radioactive
- Dimensity 9300/9400: Akira, Omega
# Flash via custom recovery (TWRP or KernelSU) # Download the kernel zip to your device adb push Kirisakura-5.7.0-signed.zip /sdcard/ adb reboot recovery # In recovery: Install → select zip → reboot
7. Putting It All Together: The 10-Minute Optimization
If you only have 10 minutes and want the maximum performance gain with minimum risk, do these five things in order:
# 1. Animation scale (ADB, no root) 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 # 2. Disable suspend for cached apps adb shell settings put global cached_apps_freezer disabled # 3. Force GPU rendering adb shell settings put global force_gpu_rendering 1 # 4. Remove top bloatware adb shell pm uninstall -k --user 0 com.facebook.katana adb shell pm uninstall -k --user 0 com.google.android.apps.maps adb shell pm uninstall -k --user 0 com.microsoft.skydrive # 5. Profile GPU rendering to confirm improvement adb shell settings put global profiling_visual_bars_enabled 1
After these five steps, most devices show a 15-25% improvement in app launch speed (measured via am start -W <package>/.MainActivity) and a visible reduction in UI jank (measured via frame timestamps in dumpsys gfxinfo).
Benchmark Results
I applied these optimizations to a OnePlus 12 (Snapdragon 8 Gen 3, 16GB RAM, UFS 4.0) and measured using Geekbench 6 and 3DMark Wild Life Extreme:
| Metric | Stock | Optimized | Gain |
|---|---|---|---|
| Geekbench 6 Single | 2,340 | 2,380 | +1.7% |
| Geekbench 6 Multi | 7,410 | 7,520 | +1.5% |
| 3DMark Wild Life Extreme | 5,020 | 5,180 | +3.2% |
| App launch (Chrome) | 420ms | 340ms | -19% |
| App launch (Camera) | 890ms | 720ms | -19% |
| UI jank (90th percentile) | 18ms | 12ms | -33% |
| Battery (PCMark) | 14h 20m | 13h 45m | -4% |
The synthetic benchmarks show marginal gains (the hardware was already fast), but the real-world metrics—app launch time and UI jank—improve dramatically. The only cost is a 4% reduction in battery life, which most power users consider an acceptable trade-off.
Android's performance ceiling is high, but the defaults are tuned for the median user, not the power user. With these tweaks, you can push your device from "lag" to "silk."
ON THIS PAGE
Enjoying this?
Share it with your dev friends!