1. Distinguish VPN Activity, Battery Attribution, and Abnormal Drain
A VPN icon in the Android status bar means the system has established a VPN interface; it does not mean the CPU is under constant heavy load. In Clash Meta and other Android clients powered by mihomo, a foreground service notification typically helps keep the proxy service running. Hiding the notification will not stop traffic from being routed. To assess battery use, compare battery levels, actual traffic, and logs over the same period—not just whether the notification stays visible.
Android battery stats may also attribute some network activity routed through a VPN to the VPN app. Reporting varies across Android versions and manufacturers, so an app ranking first in battery usage does not by itself prove that the core is malfunctioning. Background photo uploads, video preloading, and system updates can all appear as sustained traffic in the client's connection list.
Record These Four Details First
- System and core: Find your Android version under Settings → About phone. In the client’s About page or core information screen, note the client version and mihomo version. These are separate version numbers.
- Battery usage period: Go to Settings → Battery → Battery usage and check the reporting period. Don’t mix data from before and after charging.
- Network conditions: Note whether you’re on Wi-Fi or mobile data, signal strength, and whether the phone frequently switches cell towers. Poor signal can make wireless communication use more power than proxy processing.
- What’s happening: Note whether the phone stays warm, disconnects with the screen off, reconnects after a network switch, or uses more battery only while the log screen is open.
2. Compare Battery Use Over a Fixed Period
Don’t change background permissions, DNS, and proxy nodes all at once. Change one variable per test so you can identify what caused any difference. Use the same stable Wi-Fi network, stop downloads in other apps, and keep screen brightness and test duration consistent. The time periods below are for troubleshooting—not measured device results or universal benchmarks for normal battery use.
| Test phase | Action and duration | What to record |
|---|---|---|
| System baseline | Stop the proxy service and leave the screen off for 60 minutes | Starting and ending battery levels, network type, background activity |
| Proxy idle | Enable the current configuration and leave the screen off for 60 minutes | Starting and ending battery levels, total traffic, reconnection count |
| Fixed workload | Play the same video at the same resolution for 30 minutes | Heat, connection stability, client traffic |
| One-change retest | Change one setting and repeat the relevant phase | Setting changed, whether the error stopped appearing |
Battery percentage is a coarse measurement. A one-point difference in a single test isn’t enough to show that a setting helped; repeat the test twice under similar conditions. Don’t charge the phone or record the screen during testing. After stopping the proxy, check whether “Block connections without VPN” is enabled. If it is, note the setting and disable it temporarily; otherwise, the baseline may have no network access and won’t be comparable to normal connectivity.
Use the Connection List to Find Background Traffic
Open the client’s Connections page and look for traffic that keeps increasing after the screen turns off. Pause cloud sync, photo backups, and app store updates first, then retest. Some clients show app names; others show only a destination domain or IP address. A shared CDN domain alone isn’t enough to identify the app. If idle traffic is minimal but the phone stays warm, check for repeated errors, speed tests, and logging activity.
3. Battery Optimization Exceptions: Fix Disconnects, Not Battery Drain
Setting the client to Unrestricted mainly helps prevent Android from freezing or stopping the proxy service in the background. It won’t necessarily reduce battery use and may let background apps stay online more often. Check background restrictions first only if the service stops after the screen turns off, its notification keeps reappearing, or it reconnects repeatedly when you wake the screen.
Menu names and paths vary by manufacturer, Android version, and region. If you can’t find a setting, search Settings for “battery optimization,” “background activity,” or “auto-start.” Long-pressing the client icon on the Home screen and opening App info is usually the most reliable way to get started.
| System or manufacturer | Common settings path | What to check |
|---|---|---|
| Pixel / near-stock Android | Settings → Apps → client → App battery usage → Allow background usage; some versions offer Unrestricted | The option may be called Battery or Background usage, depending on your Android version |
| Xiaomi / Redmi | Settings → Apps → Manage apps → client → Battery saver → No restrictions | Also check Background autostart; locking the app in Recent apps does not replace the battery setting |
| Huawei / Honor | Settings → Apps & services or Apps → App launch → client → turn off Manage automatically | Allow auto-launch, secondary launch, and background activity as needed; names vary on some Honor models |
| OPPO / OnePlus / realme | Long-press the icon → App info → Power usage or Battery usage management → Allow background activity | If the client needs to restart automatically after a reboot, also check auto-start management |
| vivo / iQOO | Settings → Battery → Background power consumption management → client → Allow high background power usage | Also check the auto-start option under Apps → Permission management |
| Samsung One UI | Settings → Apps → client → Battery → Unrestricted | Under Battery → Background usage limits, check whether the client is listed as a deep sleeping app |
Check Always-on VPN and background permissions separately
On stock Android, the usual path is Settings → Network & internet → VPN → the settings icon next to the client. “Always-on VPN” keeps the selected VPN active; “Block connections without VPN” prevents traffic from bypassing it. Neither setting saves battery or fixes an expired subscription. These options may be unavailable if the client doesn’t support them.
First make sure the client runs reliably under the normal background settings, then decide whether you need Always-on VPN. Don’t add every app to the battery optimization exception list—allow unrestricted activity only for clients that genuinely need to run continuously. After changing a setting, test with the screen off for 60 minutes, then check how the client recovers when switching from Wi-Fi to mobile data.
4. Check TUN, App Routing, and Reconnection Loops
Android clients typically use Android's VPNService to route system traffic. This differs from desktop clients, which can create a TUN device using system permissions. Options labeled “TUN,” “VPN mode,” or “network stack” may be defined by the client itself. Don’t copy Windows service-mode instructions or assume every Android client lets you switch between system, gvisor, and mixed.
Narrow the Apps Being Routed Before Comparing Network Stacks
- If the client supports per-app routing, create a test scope that includes only your browser and essential apps, then check whether idle traffic drops. Don’t run multiple VPN apps at the same time; local packet capture, firewall, and ad-blocking tools may also occupy Android’s VPN slot.
- In rule mode,
DIRECTmeans the connection uses a direct outbound route; it does not necessarily mean it bypasses the VPN interface. To exclude an app, check the client’s app bypass feature rather than just adding a direct-connection rule. - If logs keep showing timeouts after a network switch, try a node you know works and see whether the same destination becomes reachable. An unavailable node or unreachable DNS server can both trigger repeated retries.
- Compare network stacks only if the client explicitly offers that setting. No network stack guarantees the lowest battery use on every phone. After switching, test websites, messaging, UDP traffic, and recovery after the phone sleeps.
Don’t turn off the VPN to lower the battery usage figure and then assume all apps are still using the proxy. An HTTP mixed port such as 7890 is just a local listening port; Android apps won’t use it automatically. An app must be configured to use the proxy, or the client must route system traffic for it.
5. Background Overhead from DNS, Sniffing, and Health Checks
Repeated DNS retries after failed requests are more worth investigating than simply having DNS enabled. In the client logs, filter for timeout, DNS, and network is unreachable, and check whether errors keep appearing while the phone is idle. First make sure the phone’s clock is correct and the network can reach the configured resolver; then decide whether to change DNS.
fake-ip Is Not a Battery-Saving Switch
enhanced-mode: fake-ip uses virtual addresses to maintain domain mappings for rule matching; it doesn’t send every request to a remote server. The name redir-host alone doesn’t mean it uses less battery. Switching modes without a specific reason may affect local device discovery or apps that depend on real DNS answers. Treat those as compatibility issues and test accordingly.
The fields below are examples, not a complete subscription configuration. 223.5.5.5 is an example of plaintext DNS; its query visibility differs from encrypted DNS, and it may not be reachable on every network. If your existing configuration uses nameserver-policy, proxy-server-nameserver, or encrypted DNS, preserve those resolver dependencies—don’t replace the entire section.
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
Reduce Unnecessary Speed Test Frequency
- Health checks: Check
health-check.intervalunderproxy-providers, as well asintervalforurl-testandfallbackgroups. These intervals are usually in seconds. If the current value is 60, try 600 for comparison if stability allows. Don’t confuse subscription update intervals with speed test intervals. - Number of nodes: A full check of 100 nodes every 60 seconds could theoretically generate about 100 probes per minute; actual activity also depends on on-demand checks and usage. Reducing the number of nodes included in tests is easier on background traffic than repeatedly running a manual “Test all.”
- Domain sniffing: If your current rules don’t rely on sniffing to recover domain names, temporarily disable sniffing in the client and retest. Rules that depend on recovered domains may match differently, so verify routing instead of looking at battery use alone.
- Log level: When troubleshooting is done, change
log-levelfromdebugback toinfoorwarning, and close any log screen that refreshes continuously. A monitoring session with the screen on is not representative of everyday battery use with the screen off.
6. Narrow Down Settings by Symptom and Keep Reproducible Results
| Symptom | Check first | How to retest |
|---|---|---|
| Disconnects with the screen off, reconnects when it’s on | Battery optimization, background activity permissions, deep sleeping app list | Allow background activity, leave the screen off for 60 minutes, then check notifications and connection recovery |
| Traffic continues while idle | Background sync, node health checks, app updates | Pause one source at a time and see whether traffic stops increasing in the connection list |
| Phone gets warm after switching networks | Node reachability, DNS timeouts, repeated reconnects | Test on a fixed Wi-Fi connection, then test a network switch separately |
| High battery use only on mobile data | Signal strength, frequent network switches, cellular data transfer | Compare with Wi-Fi in the same location; don’t assume the core is responsible |
| High battery use only while viewing logs | Debug logging, screen refreshes, display brightness | Restore a normal log level, close the page, and retest |
A reasonable stopping point is when the background connection is stable, idle traffic has an identified source, error logs no longer repeat, and the battery difference is reproducible under the same conditions. Don’t chase a universal battery percentage that applies to every phone, or disable every power-saving restriction just to keep the client alive.
If the problem persists, record your phone model, Android version, client and mihomo versions, network type, test duration, and a redacted excerpt of any errors. Note whether it happens only with a particular subscription configuration and whether switching nodes fixes it. These details help distinguish client issues from configuration or network problems. For basic configuration steps, see Getting Started. For help investigating connections and DNS, see Troubleshooting.