Surya Pratap Singh

Surya Pratap Singh

AI Engineer & Founder

May 15, 2026
12 min read
Android Performance Optimization Guide: From Lag to Silk
Android Customization

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:

SettingDefaultRecommended
Window animation scale1.0x0.5x or Off
Transition animation scale1.0x0.5x or Off
Animator duration scale1.0x0.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 processes is too extreme (breaks notifications). Try At most 4 processes for a middle ground, or leave at Standard limit but 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:

  1. Never uninstall com.android.* or com.google.android.gms (Google Play Services)
  2. Do not remove the launcher, keyboard, or Settings app
  3. 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
  4. 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.

GovernorBehaviorBest For
performanceLocks all cores at max frequencyBenchmarking, gaming
schedutilScales based on scheduler utilizationDefault, balanced
conservativeSlow to scale up, quick to scale downBattery saving
blu_schedutilModified schedutil, faster ramp-upDaily 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_granularity for 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:

MetricStockOptimizedGain
Geekbench 6 Single2,3402,380+1.7%
Geekbench 6 Multi7,4107,520+1.5%
3DMark Wild Life Extreme5,0205,180+3.2%
App launch (Chrome)420ms340ms-19%
App launch (Camera)890ms720ms-19%
UI jank (90th percentile)18ms12ms-33%
Battery (PCMark)14h 20m13h 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."