Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I see which wakelocks are active

For some reason my Android phone won't go to sleep. I assume that a wakelock is keeping it awake, but there is no way to tell which wakelocks are active. The running services doesn't list anything suspicious, and certainly nothing different from usual. So my questions are:

  1. Does Android definitely release wakelocks when a process ends? Is it possible an app was badly written and didn't release a wakelock before exiting?

  2. Is there any way to see the active wakelocks?

This is what dumpsys power shows:

$ dumpsys power Power Manager State:   mIsPowered=true mPowerState=0 mScreenOffTime=226093 ms   mPartialCount=0   mWakeLockState=   mUserState=   mPowerState=   mLocks.gather=   mNextTimeout=91922738 now=92136117 -213s from now   mDimScreen=true mStayOnConditions=0   mScreenOffReason=3 mUserState=0   mBroadcastQueue={-1,-1,-1}   mBroadcastWhy={0,0,0}   mPokey=1 mPokeAwakeonSet=false   mKeyboardVisible=false mUserActivityAllowed=false   mKeylightDelay=6000 mDimDelay=47000 mScreenOffDelay=7000   mPreventScreenOn=false  mScreenBrightnessOverride=-1  mButtonBrightnessOverride=-1   mScreenOffTimeoutSetting=60000 mMaximumScreenOffTimeout=2147483647   mLastScreenOnTime=0   mBroadcastWakeLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)   mStayOnWhilePluggedInScreenDimLock=UnsynchronizedWakeLock(mFlags=0x6 mCount=0 mHeld=false)   mStayOnWhilePluggedInPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)   mPreventScreenOnPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)   mProximityPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)   mProximityWakeLockCount=0   mProximitySensorEnabled=false   mProximitySensorActive=false   mProximityPendingValue=-1   mLastProximityEventTime=0   mLightSensorEnabled=false   mLightSensorValue=-1.0 mLightSensorPendingValue=-1.0   mLightSensorScreenBrightness=35 mLightSensorButtonBrightness=255 mLightSensorKeyboardBrightness=0   mUseSoftwareAutoBrightness=true   mAutoBrightessEnabled=false   mScreenBrightness: animating=false targetValue=-1 curValue=0.0 delta=-1.3333334  mLocks.size=0:  mPokeLocks.size=1:     poke lock 'PhoneApp': POKE_LOCK_IGNORE_CHEEK_EVENTS 
like image 660
Timmmm Avatar asked Apr 25 '11 16:04

Timmmm


People also ask

What app is keeping my phone awake?

Wakey. Wakey is a simple and useful app that will keep your screen awake when you are using all the apps whitelisted. That gives you more control as you get to choose which apps deserve your attention.

What is a Wakelock on Android phone?

A wakelock is a powerful concept in Android that allows the developer to modify the default power state of their device. The danger of using a wakelock in an application is that it will reduce the battery life of a device.

How do I turn off Wakelocks?

If you feel an app/service wakelock is running unnecessarily, you can simply tap on the specific entry and tap on the “BLOCK” button to stop it.


2 Answers

In new versions of Android you can see list of wakelocks here:

adb shell "cat /sys/kernel/debug/wakeup_sources" 
like image 161
obezyan Avatar answered Oct 03 '22 04:10

obezyan


You can use below adb command to require a wake lock

  adb shell "echo mylock > /sys/power/wake_lock" 

Then, you can use below command to watch if this lock is active. You will see the time column continuously change, it means the wake lock is active

  watch -n 1 'adb shell "cat /proc/wakelocks" | grep mylock' 

Now, use this adb command to release the wake lock

  adb shell "echo mylock > /sys/power/wake_unlock" 

Then, check it again, the time column will freeze, it means the wake lock is non active

  watch -n 1 'adb shell "cat /proc/wakelocks" | grep mylock' 

You can use the same technique to observe the wake lock you acquire in the code.

like image 43
Browny Lin Avatar answered Oct 03 '22 04:10

Browny Lin