First separate proxy traffic, wireless activity, and repeated background reconnects before changing battery settings. This guide is for Android users dealing with standby drain, lock-screen disconnects, or battery-life changes after enabling Mux. It provides repeatable comparison steps, ways to interpret logs, and guidance on per-app proxy settings—without treating a single percentage in the battery usage list as proof of a problem.
1. Read battery stats: usage share vs. actual drain
On Android, v2rayNG uses a VPN service to receive app traffic and passes it to the Xray core for routing and outbound connections. Encryption, forwarding data, and maintaining connections all use CPU time; waking and transmitting over a wireless network also use power. How Android attributes this activity varies by version and manufacturer, so don’t assume all battery use attributed to v2rayNG comes from the client sitting idle.
Open Settings → Battery → Battery usage and check the time range covered, then open v2rayNG’s app details. Some devices label this screen Battery usage ranking. The percentage shown may be a share of the battery used during that period, not percentage points of total battery capacity. Check the system’s explanation, then compare foreground and background activity with the device’s overall battery change over the same period.
- Record the setup: Android version, v2rayNG version, selected node, Wi-Fi or mobile data, and whether the screen is on. Find the client version in App info or the client’s About page; don’t infer it from the installer filename.
- Record total usage: Note the starting and ending battery levels and test duration. Don’t compare stats from before one charge with stats from after the next.
- Record what you did: Note whether you streamed video, downloaded files, ran cloud sync, switched networks, or moved out of signal range during the test.
- Record anything unusual: Check whether the service stays active after the screen locks, whether it needs to reconnect after unlocking, and whether the logs show repeated timeouts.
The foreground service notification shown while connected tells Android and the user that the service is running. A persistent notification doesn’t mean the CPU is under constant heavy load; a missing notification alone doesn’t prove the service has stopped. Check the connection status and the app’s system info as well.
2. Use consistent test windows to find the cause
Change only one variable at a time when comparing battery life. Start with a screen-off standby test, then test a fixed workload. Don’t change nodes, enable Mux, and remove background restrictions all at once: even if power use changes, you won’t know which setting caused it.
- Baseline without the proxy: Pause unnecessary downloads and sync, then lock the screen for 60 minutes in an area with a stable signal. Record the starting and ending battery levels. If disabling the proxy makes an app keep retrying, pause that app first so it doesn’t skew the baseline.
- Connected standby: Use the same network and node, start v2rayNG, then lock the screen for 60 minutes. Keep everything else the same and watch for disconnects, restarts, or unusual traffic.
- Fixed workload: Prepare a repeatable 20-minute routine, such as browsing the same set of pages. Keep brightness and refresh rate fixed so differences in video quality or screen power use aren’t mistaken for proxy effects.
- Repeat in a different order: Change the test order and run at least two more rounds. Battery indicators usually update in whole percentages, so a one-point difference over a short test isn’t enough to draw a conclusion.
These durations describe a test plan, not measured battery life. If the whole device drains quickly even without the proxy, check for a weak signal, hotspot use, location services, and background sync first. If drain increases only when the proxy is on and traffic is flowing, check actual data use, connection retries, and routing scope.
Bottom line: test standby and data transfer separately
If connected standby is stable but power use rises during sustained transfers, first reduce unnecessary proxy traffic. If the connection repeatedly drops with the screen locked, address background restrictions or network issues before changing protocol settings.
3. Battery optimization exemptions keep services alive; they don’t reduce power use
Android battery optimization, Doze, and manufacturer background management are separate controls. Setting v2rayNG to Unrestricted mainly helps prevent interruptions caused by background limits. It won’t reduce encryption overhead or guarantee that the network stays awake. Conversely, strict restrictions may cause repeated disconnects, but that doesn’t mean removing them will save battery on every device.
Start by long-pressing the v2rayNG icon and opening App info → Battery or App battery usage. Recent Android versions often offer Unrestricted, Optimized, and Restricted options. On other systems, go to Settings → Apps → Special app access → Battery optimization, find the app, and select Don’t optimize. Menu names vary by device.
- Disconnects only after the screen locks: Change v2rayNG from Restricted to Optimized first. If it still disconnects, try Unrestricted or Don’t optimize. Reconnect after each change, then repeat the screen-off test.
- Must reconnect manually after a restart: Check whether the client offers a start-on-boot setting and whether the system allows it to run at startup. Startup permission controls when the app launches; it doesn’t force the network connection to stay active.
- The manufacturer provides separate background controls: Check background activity permissions in App info, as well as auto-start management in the system’s security or battery settings. Locking the app in the recent-apps list may help on some devices, but it doesn’t replace battery settings.
- System VPN settings: Go to Settings → Network & internet → VPN and check whether Always-on VPN is enabled. This controls connection behavior, not battery use. If Block connections without VPN is enabled, apps may lose network access when the service is unavailable.
Don’t remove background restrictions for every app just to troubleshoot one proxy connection. If you use the proxy occasionally, stop the service when you’re done. If an app needs to receive messages continuously, loosen restrictions only if testing shows that it disconnects.
4. Check reconnect logs before blaming background limits
A weak signal, unreachable node, failed DNS lookup, or remote disconnection can all trigger app-level retries. A battery optimization exemption won’t fix these issues. Open the logs from v2rayNG’s main screen and check when connection failures occur. See whether they line up with the screen turning off, a network switch, or a particular app launching.
The examples below are real error snippets that may appear in logs; full prefixes and descriptions vary by core version. A one-off error is common during a network switch or connection shutdown. Investigate further only if it repeats and coincides with failed traffic.
context deadline exceeded
Cause and fix: A connection or request exceeded its timeout. The cause could be the node, name resolution, or the network path. Check the destination in the same log entry, then try a known-working node on the same network for comparison. Don’t assume a timeout means DNS is at fault.
connection refused
Cause and fix: The connection to the destination port was refused. Check the destination address and port in the log, then confirm that a service is listening there. If the destination is a local address, check whether the corresponding local service is running instead of blaming the remote node.
network is unreachable
Cause and fix: The current network has no usable route to the destination. Confirm that the device has a working connection, and check whether the issue occurs only with IPv6 destinations or after switching networks. Then investigate the address family or network recovery as appropriate.
If you need more system details, run these read-only commands on a computer configured with Android debugging tools. The first checks battery status, the second shows battery statistics related to the app, and the third checks device idle state. Some systems trim output or restrict statistics; a missing value doesn’t mean power use is zero.
adb shell dumpsys battery
adb shell dumpsys batterystats com.v2ray.ang
adb shell dumpsys deviceidle
- Compare log timestamps with the actual disconnect time. Don’t treat an old error as evidence from the current test.
- Restore your usual log level when troubleshooting is done. Detailed logging over time adds write overhead, but don’t call it a major source of drain without a controlled comparison.
- Before sharing logs, remove sensitive information such as server addresses, user IDs, and subscription URLs. Don’t publish your full configuration.
5. Mux trade-offs: turn it off to establish a baseline
Mux multiplexes multiple logical connections over fewer underlying connections. It may reduce handshake overhead for some short-lived connections, but congestion, packet loss, or a disconnect on a shared connection can affect multiple requests. Mux doesn’t compress traffic or act as a universal battery-saving switch; enabling it won’t make the data used by continuous video streaming disappear.
Look for Mux or multiplexing options in v2rayNG Settings. Some versions show the toggle and concurrency limit separately, and a custom configuration may override the interface. Note the current values, then establish a baseline with Mux disabled. Stop and restart the connection after changing settings to ensure the new configuration is loaded.
| Use case | What to test first | What to observe |
|---|---|---|
| Short-lived connections, such as web pages and messages | Repeat the test with Mux off and on | Failed requests, reconnect frequency, and overall battery drain |
| Video streaming or large file transfers | Start with Mux off as the baseline | Throughput stability, temperature, and total data transferred |
| Weak signal or frequent network switching | Fix the network path before comparing Mux | Whether multiple requests fail at the same time |
| VLESS with Vision | Check core support and limitations first | Whether the configuration loads and the flow-control setting is compatible |
If the interface lets you set TCP Mux concurrency, and you’ve confirmed the configuration supports it, try 4 as a comparison value and test it against Mux being off. This is a test parameter, not a best setting for every node. Don’t keep increasing concurrency to save power. UDP multiplexing options are separate from TCP concurrency, so the same conclusions don’t necessarily apply.
VMess and VLESS are proxy protocols. REALITY is a transport security option that can be used with VLESS and other protocols; its name alone doesn’t tell you whether it’s compatible with Mux. For common VLESS, REALITY, and xtls-rprx-vision setups, don’t enable TCP Mux by default. Follow the current Xray core’s restrictions for Vision.
Bottom line: keep the simpler setting unless you see a consistent benefit
Keep Mux enabled only if repeated tests show a reproducible improvement with the same node, network, and workload. If the difference is within the margin of error on the battery indicator, favor the configuration with stable connections and clear compatibility.
6. Per-app proxying narrows traffic scope; it doesn’t block apps from the network
v2rayNG’s per-app proxy settings determine which apps enter the VPN; core routing then decides whether that traffic is proxied, sent directly, or blocked. These are separate layers. An app inside the VPN may still pass through local interception and forwarding even if a direct-routing rule ultimately applies. Excluding it from the VPN may shorten the path further.
- Go to v2rayNG Settings → Per-app proxy and read how your version describes its modes. Confirm whether the selected mode means “proxy only selected apps” or “bypass selected apps”; don’t infer the behavior from checkmarks alone.
- To narrow the proxy scope, start by routing only the apps that need the proxy, then test browsers, messaging apps, and download apps individually.
- For high-traffic apps that don’t need the proxy and work normally over a direct connection, test what happens when you exclude them. Excluded apps use your local network connection and may use the system’s DNS path, so make sure that fits your privacy and routing requirements.
- Save the settings and reconnect the VPN. If Android’s Block connections without VPN setting is enabled, check that excluded apps can still access the network; don’t assume they’ll automatically connect directly.
Per-app proxying can help by reducing unnecessary processing, not by changing the wireless connection itself. Uploads, downloads, and retries on a weak signal still use power even when an app bypasses the proxy. If a messaging app relies on a shared system push service, test message delivery separately rather than attributing every delay to v2rayNG.
Before changing settings, list the apps that must use the proxy. After saving, test access to your intended destinations, background messages, and network switching. Make sure you haven’t accidentally sent traffic that needs protection over a direct connection.
7. Background activity and battery life: common questions
The connection drops after just 10–15 minutes with the screen off. Do I have to disable battery optimization?
First check whether the VPN service stopped or only a remote connection dropped. If the service was stopped, loosen restrictions step by step in App info → Battery. If the service is still running but the logs show repeated timeouts, compare the network and node first. Change one setting at a time, then run another 60-minute screen-off test.
v2rayNG is at the top of my battery usage list. Should I uninstall it right away?
Check the reporting period and the device’s overall battery drain first. The proxy handles traffic from multiple apps, so a high ranking alone doesn’t prove anything is wrong. Pause high-traffic activity, compare standby with and without the proxy, then decide whether to reinstall or reconfigure it.
Will increasing Mux concurrency save battery?
There’s no general rule that it will. Turn Mux off to establish a baseline, then compare with a fixed value if your configuration supports it. If requests start failing together, the configuration won’t load, or compatibility issues appear, turn it off again. Don’t use higher concurrency to mask network problems.
Will switching to v2flyNG fix battery drain?
The client name alone can’t tell you. v2rayNG uses the Xray core, while v2flyNG uses the V2Fly core; protocol support and configuration compatibility differ. First confirm that your current node and routing are supported, then compare under equivalent conditions. Switching cores won’t fix a background permission problem.
When you’re done troubleshooting, keep a working configuration and test notes: network type, background settings, Mux status, per-app scope, standby drain, and relevant logs. Undo changes that didn’t produce a consistent improvement. If battery life changes after a client update or node switch, you can pick up from the last reproducible baseline instead of changing every setting again.