Modern mobile applications—particularly high-frame-rate games, AR/VR experiences, video encoders, camera pipelines, and intensive machine learning workloads—place heavy processing demands on smartphone CPUs and GPUs. When internal battery or silicon temperatures surge, the Android system engages progressive thermal throttling, ramping down CPU clock speeds, capping display refresh rates, disabling flash units, or terminating tasks. Waiting for a device to physically overheat to test thermal fallbacks is impractical and risks damaging hardware. Using Android Debug Bridge (ADB), developers can override thermal status levels instantly.
In this guide, you will learn how to inspect physical thermal sensors, simulate synthetic thermal throttling states, verify PowerManager.OnThermalStatusChangedListener callbacks, and test cooling responses on Android using ADB.
Understanding Android Thermal Throttling Status Levels
Introduced in Android 10 (API level 29), the PowerManager thermal API defines standardized thermal status constants that applications can monitor to proactively adapt graphics fidelity and computational intensity:
| Thermal Status | Severity | Expected Application Response |
|---|---|---|
THERMAL_STATUS_NONE |
0 | Normal operating temperatures. Full performance enabled. |
THERMAL_STATUS_LIGHT |
1 | Slight temperature rise. No major UX impact; minor background sync pacing. |
THERMAL_STATUS_MODERATE |
2 | Device is warming. Reduce display refresh rate from 120Hz to 60Hz; reduce post-processing filters. |
THERMAL_STATUS_SEVERE |
3 | Heavy thermal throttling. Drop game target from 60 FPS to 30 FPS; lower shadow and render resolution. |
THERMAL_STATUS_CRITICAL |
4 | Silicon throttling actively drops clock frequencies. Disable non-essential UI features and reduce CPU threads. |
THERMAL_STATUS_EMERGENCY |
5 | Imminent thermal damage. Silence audio, disable cellular/camera, and prepare for system shutdown. |
THERMAL_STATUS_SHUTDOWN |
6 | Operating system initiates emergency shutdown to preserve hardware. |
Connecting to the Device and Inspecting Hardware Sensors
Connect your Android phone or emulator via USB or Wireless ADB, and verify that the device is detected:
adb devices
To inspect the real-time physical temperature readings from onboard thermal zones (CPU clusters, GPU cores, battery, modem, and ambient sensors), query dumpsys thermalservice:
adb shell dumpsys thermalservice
The output reports temperatures in degrees Celsius alongside individual zone trip points:
Current Temperature List:
Temperature{mValue=34.2, mType=0, mName=cpu-0-0-usr, mStatus=0}
Temperature{mValue=32.8, mType=1, mName=gpu-usr, mStatus=0}
Temperature{mValue=31.5, mType=2, mName=battery, mStatus=0}
Overriding and Simulating Thermal Status via ADB
To evaluate how your application gracefully degrades graphic resolution or reduces frame rates without waiting for physical heat buildup, override the system thermal state using cmd thermalservice override-status.
The command accepts an integer representing the desired thermal status severity (0 through 6):
# Simulate moderate heating (Status 2)
adb shell cmd thermalservice override-status 2
# Simulate severe thermal throttling (Status 3)
adb shell cmd thermalservice override-status 3
# Simulate critical hardware throttling (Status 4)
adb shell cmd thermalservice override-status 4
Observe your application’s behaviour and verify that it responds dynamically. For example, a 3D game engine should automatically step down LOD (Level of Detail) biases, lower shadow map resolutions, or cap the frame rate to reduce GPU workload.
Verifying Thermal Status in Logcat
Monitor your app’s thermal listener callbacks in logcat to verify that notifications arrive without lag:
adb logcat -s "MyThermalListener" "PowerManager" "ThermalService"
Confirm that your implementation of onThermalStatusChanged(int status) logs the updated status and initiates cooling measures.
Simulating Headroom Availability
Starting with Android 11, the Android Dynamic Performance Framework (ADPF) introduces the Thermal Headroom API (PowerManager.getThermalHeadroom(int forecastSeconds)). This API forecasts how close the device is to severe throttling, returning a floating-point value where 1.0 represents the severe throttling threshold.
To check thermal headroom and throttling predictions:
adb shell dumpsys thermalservice | grep -A 5 "Thermal Headroom"
Apps can use headroom forecasts to preemptively taper particle effects or texture resolutions before severe throttling occurs, preventing jarring frame spikes.
Resetting Thermal Simulation to Hardware Defaults
When testing is finished, reset the thermal service override to restore normal hardware sensor reporting:
adb shell cmd thermalservice reset
Verify that the override is cleared by checking the status:
adb shell dumpsys thermalservice | grep "Thermal Status:"
The status returns to 0 (or current actual hardware reading), and all mobile operating system performance governors revert to normal scheduling.