The Xiaomi Mi A1 has the chops to run multimedia content like a perfect, budget phone. It packs a Snapdragon 625 chipset, 4GB RAM, and 1080p screen combination. These give it the power to run most content with ease. Yet, users have complained about the excessive battery drain on Xiaomi Mi A1.
Is excessive battery drain on Xiaomi Mi A1 such an issue?
Many people are displeased about how fast their Mi A1s are losing battery power.
For example, XDA member felipovicc complained that his device didn’t go into deep sleep when it was idle. As the screenshot below shows, a kernel service named 7000000.ssusb
used up to 59% of the battery power.
MIUI senior member Kintsugi also complained about 7000000.ssusb
. He found out that it used about half of his Mi A1’s idle battery power. See the screenshot below.
XDA member AkCullen tried out a few things to reduce the excessive battery drain. Yet, despite stopping background apps and calibrating the battery his device lost about 80% of its power while in idle mode.
What are wakelocks?
Smartphones have smaller battery sizes than, say, laptops or PCs. Battery life is thus a key concern for most phone users. Besides, most manufacturers market their devices by claiming that they can last a full day on a single charge.
Android 7 introduced the Doze mode to force devices to go into deep sleep. So, in ideal situations, a Xiaomi Mi A1 phone should activate Doze when its screen is off and a user has not touched it for some time.
Still, at times, apps need to wake up the CPU or screen to complete some tasks. These apps use wakelocks, which prevent devices from going into deep sleep fully.
Android power management
Android’s PowerManager
APIs expose wakelocks to apps. Using wakelocks, apps can then prevent devices from entering suspend mode. These APIs assume that wakelocks would work for short periods of time. So, once background services have completed their tasks, they are supposed to release them. Otherwise, wakelocks that linger on may drain battery power quickly.
Examples wakelocks’ states
The Android PowerManager
API defines several wakelock states. See below.
PARTIAL_WAKE_LOCK
:- Wakes up the CPU
SCREEN_DIM_WAKE_LOCK
:- Wakes up the CPU
- Activates the screen in dim mode
SCREEN_BRIGHT_WAKE_LOCK
:- Wakes up the CPU
- Activates the screen in bright mode
FULL_WAKE_LOCK
:- Wakes up the CPU
- Activates the screen in bright mode
- Lights up the keyboard
Power management on Android 9 pie
Android Pie has introduced new ways of improving battery performance. The OS tries to give resources to those apps that need them the most. It uses two major features:
- Restricting resource usage when battery saver is on: It applies the limits on all apps.
- App standby buckets: The system monitors app usage patterns. Then, it limits the use of resources, like CPU, depending on the apps’ needs.
Thus, a simple method of improving the battery performance on Xiaomi Mi A1 is to install Android Pie.
Wakelocks vs. wakeups
Some apps can wake up devices at a specific time. They use the AlarmManager
API to force a device to come out of sleep mode. Using the PARTIAL_WAKE_LOCK
flag, they can run given tasks by activating the AlarmManager
API.
Yet, poor app design causes some services to make excessive wakeup calls. Such applications may lead to quick battery drainage.
How to deal with rogue wakelocks on Xiaomi Mi A1
An earlier post shared tips on how to make the Xiaomi Mi A1’s last longer. It listed tactics like turning off Google Sync and disabling unused services. It also advised users to install apps like Greenify, BetterBatteryStats, and GSam Battery Monitor.
Likewise, today I’ll share three working methods of dealing with excessive battery drain on Xiaomi Mi A1. The first one requires root while the last two don’t.
How to stop wakelocks on Xiaomi Mi A1 with root
This method uses the Amplify app.
It also needs two things to work:
- Root access: See the guide on how to root Xiaomi Mi A1
- Xposed Framework: See steps for installation below
Installing the Xposed Framework on Xiaomi Mi A1
- Download the Xposed Framework for your OS’s variant below:
- Android 7.1: xposed-v89-sdk25-arm64.zip
- Android 8.0: xposed-v90-sdk26-arm64-beta3.zip
- Android 8.1: xposed-v90-sdk27-arm64-beta3.zip
- Flash the right .zip file using, say, TWRP custom recovery
- Install the Xposed installer. Using the .apk file below
- Xposed installer: xposed-installer-3-1-5.apk
With that out of the way, go ahead and install the Amplify app. Find the Play Store link above.
Use the app’s recommended defaults if you’re unsure of how to proceed. Otherwise, the app has ways of customizing the behavior of all services, alarms, and wakelocks running on your device.
How to stop wakelocks on Xiaomi Mi A1 without root
Wakelock Detector Lite and BetterBatteryStats do not require root access to manage wakelocks. Still, you’ll need to set up ADB drivers for the two to work.
Related:
How to install ADB/Fastboot drivers on PC
How to install ADB and Fastboot Drivers on Mac OS
How to flash recovery.img and install ADB on Linux OS
Using the Wakelock Detector
You can use the Wakelock Detector method in two ways. One, where you install a chrome extension. And two, where you pass permissions to the app using the terminal/command line.
Using a chrome browser extension
The app’s browser extension works on Google Chrome only. Thus, you’ll have to install the browser if you don’t have it on your PC already.
Prerequisites:
- Download and install Wakelock Detector Lite on your Mi A1
- Install the Google Chrome extension for Wakelock Detector: Unlocker for WakeLockDetector
- Enable USB debugging mode on your device
Steps:
- Connect your device to PC using USB
- Connect the phone’s as a media device. Go to
Storage/USB computer connection
, then, select connect asMedia device (MTP)
. - Run the Wakelock Detector Lite app on your phone
- Run the Unlocker for WakelockDetector extension on Chrome browser. You should get a screen like the one below.
- Press the USB icon named
Connection mode
on the extension - The extension will make your phone to bring up a dialog asking for RSA confirmation. Select
Allow from this computer
, then pressOK
- As another option, the
Grant Battery stats
button may turn to a thumbs up icon. If this happens, press it instead of the USB icon to give the app the required permissions
Using the terminal/command line
- Connect your device to a computer using a USB cable
- Type the commands below on the terminal or command line
$ adb tcpip 5555
$ adb shell pm grant com.uzumapps.wakelockdetector.noroot android.permission.BATTERY_STATS
After that, you may use the app to stop rogue wakelocks by:
- Charging your device to full charge
- Disconnecting the charger and using the phone for about one to two hours
- Opening the app and noting the services or apps showing excessive wakelock usage
- Stopping the offending apps from draining your device’s battery
Using BetterBatteryStats
The BetterBatteryStats method is very similar to the one by the Wakelock Detector app. The key difference is that with BetterBatteryStats, you will use the command line alone.
If you have the ADB drivers all set up, you should thus start managing wakelocks using the steps below.
- Download and install the Package Name Viewer app from Play Store. You’ll see in a second how the application comes in handy when you need to stop specific wakelocks.
- Enable USB debugging on your device
- Connect it to a computer using a USB cable
- Run the command:
adb devices
- If the terminal responds with the name of your device (or, if using Linux, it returns:
no permissions
), you can proceed to the next step. If this step fails, it means that your ADB drivers’ installation has a problem. - Give the
BATTERY_STATS
permission to the BetterBatteryStats app using the commands below:
$ adb -d shell pm grant com.asksven.betterbatterystats android.permission.BATTERY_STATS
$ adb -d shell pm grant com.asksven.betterbatterystats android.permission.DUMP
$ adb -d shell pm grant com.asksven.betterbatterystats android.permission.PACKAGE_USAGE_STATS
After that, you may run the app on your phone to see which services are running excessive wakelocks.
If you’ve noticed an offending app/service or two, use the steps below to stop their wakelocks.
- Run Package Name Viewer to find out the package name of the culprit. Note that package name somewhere. So, let’s say the app draining your battery is Facebook Lite. Its package name is
com.facebook.lite
- Then, connect your phone to a computer using USB, then run the
adb devices
command - If successful, run the command:
adb shell
- Then:
cmd appops set com.facebook.lite WAKE_LOCK ignore
That’s it! You’ve managed to force your device to turn down all unruly wakelock requests.
Over to you
In this post, we’ve seen that wakelocks may cause your smartphone to drain its battery power quickly. Remember, some Xiaomi Mi A1 users claim that the problem is so bad that they lose up to 80% of their charge in only two hours of idle time.
Remember, wakelock requests are not bad things per se. Still, if your device seems to lose its battery power without reason, you may have to install apps like the ones we’ve seen above. These will help you kill services or apps that misbehave.
So, these are just but some of the ways that may deal with wakelocks on an Android device. If you’ve tried them out, please share your experience in the comments section. Also, don’t hesitate to point out new, better ways of handling excessive battery drain.