We often see games that drain a phone's battery in an hour and a half. Even with steady 60 FPS, users still leave one- and two-star reviews — the battery melts before their eyes. Power consumption is a direct indicator of inefficient CPU and GPU usage. Optimizing battery consumption for a mobile game is systematic work: from FPS management to shaders and network requests. Over five years, we've optimized 15+ projects, increasing their battery life by 20–40%. Our certified engineers deliver measurable results. Contact us for an audit — we'll evaluate your project and propose a solution.
Main Sources of Power Waste — Battery Optimization
Unlimited FPS is the most common mistake. Application.targetFrameRate = -1 (or no explicit setting) means Unity renders as fast as it can. On modern iPhones with ProMotion displays, this can be 120 FPS in a simple menu. For a menu, 30 FPS is enough — the remaining 70% of CPU/GPU time is wasted and heats up the device.
An animated background in the main menu with 500 particles runs continuously. No pause when losing focus — no savings.
If the game requests Input.location or Input.gyro unnecessarily and doesn't disable them, sensors are polled constantly. On Android, that's a few extra milliwatts.
Small HTTP requests every 5–10 seconds keep the radio module active — one of the most power-hungry components.
How to Tell If Your Game Is Wasting Power?
Use profiling:
| Tool | What It Shows | Target |
|---|---|---|
| Xcode Energy Organizer | Energy impact estimate for iOS | Green level |
| Android Vitals Battery | Background wakeup frequency | < 10 times/hour |
adb shell dumpsys batterystats |
Breakdown by component (CPU, GPU, radio) | CPU/GPU < 30% in menu |
If the menu keeps CPU/GPU at 70%, that's a problem.
Why FPS Management Is the First Step in Mobile Game Battery Optimization?
The right strategy is different targets for different states:
// Gameplay: maximum quality Application.targetFrameRate = 60; // Menu, pauses, dialogs Application.targetFrameRate = 30; // Background calculations (loading, saving) Application.targetFrameRate = 15; On iOS, also account for ProMotion displays (120 Hz on iPhone 13 Pro+). Explicitly set CADisplayLink.preferredFrameRateRange via Native Plugin for fine-tuning.
In OnApplicationPause(true), reduce FPS to minimum or stop rendering entirely.
How to Optimize Shaders for Battery Savings?
On mobile GPUs, computation precision matters. Using half-precision instead of float in shaders on Adreno and Mali yields real energy savings. The ALUs of these chips are optimized for half-precision. For most effects (color, UV, lighting), half precision is sufficient.
Baked lightmaps instead of dynamic lighting reduce fragment shader load by 3–5 times — a direct comparison: baked lightmaps beat dynamic lighting by 3–5 times in GPU load. Complex fragment shaders with many texture samples are especially expensive — each tex2D stalls the pipeline.
Comparison of rendering approaches:
| Approach | Relative Load | Battery Life Gain |
|---|---|---|
| Dynamic lighting | 100% (baseline) | — |
| Baked lightmaps | 20–30% | +20–40% |
| Half-precision everywhere | 70% | +15% |
How to Perform an Initial Power Consumption Diagnosis?
- Set target FPS for each state (gameplay, menu, pause).
- Check shaders: replace float with half, bake lightmaps.
- Configure network request batching — buffer and send in a batch once per minute.
- Profile on a real device using Xcode or adb.
Network Request Batching
Instead of sending events one by one — batching (buffering and sending in a batch once per minute). Firebase Analytics does this automatically. If using custom analytics via HTTP — an explicit RequestQueue with a timer.
On Android, WorkManager with setRequiresBatteryNotLow(true) postpones non-critical requests until the device is charging.
What Is Included in the Audit and Optimization?
- Code and project configuration analysis.
- Profiling on real devices using Xcode Energy Organizer and Android Vitals.
- FPS configuration by context (gameplay, menu, background).
- Shader optimization (conversion to half-precision, baking lightmaps).
- Network request batching implementation.
- Retesting and a report with metrics.
- Guarantee of 20–40% increase in battery life.
Typical Mistakes Checklist
- No FPS limit in menus.
- Particles not stopping on pause.
- Sensors polled constantly.
- Network requests sent one by one without aggregation.
Timeline: 1 to 4 weeks depending on codebase size. Pricing is determined individually. Get a consultation on battery optimization today.
Verification of Results
iOS: Xcode Energy Organizer + MetricKit. MXCPUMetric and MXGPUMetric in didReceive provide real consumption data from user reports.
Android: Android Vitals in Play Console → Battery → Excessive wakeups. If the app wakes the device more than 10 times per hour in the background, it's a flag from Google that affects visibility.
For local testing: adb shell dumpsys batterystats --reset before the test and adb shell dumpsys batterystats after.
Our certified engineers conduct an audit and propose a solution with a guarantee of 20–40% increase in battery life. Contact us for an audit — we'll evaluate your project and propose a solution.







