我怎么能看到哪些wakelocks活跃活跃、我怎么、能看到、wakelocks

2023-09-04 08:11:00 作者:故事与旧友

出于某种原因,我的Andr​​oid手机不会进入睡眠状态。我认为一个wakelock是保持其清醒,但目前还没有办法知道哪些wakelocks活跃。正在运行的服务没有列出任何可疑的,肯定没有什么异于往常。所以,我的问题是:

难道Android的绝对释放wakelocks进程结束时?是否有可能一个应用程序被写的不好并在退​​出之前没有发布wakelock?

有没有办法看到积极wakelocks?

这是什么 dumpsys功率显示:

  $ dumpsys电源
电源管理状态:
  mIsPowered =真mPowerState = 0 mScreenOffTime = 226093毫秒
  mPartialCount = 0
  mWakeLockState =
  mUserState =
  mPowerState =
  mLocks.gather =
  mNextTimeout = 91922738现在= 92136117 -213s从现在开始
  mDimScreen =真mStayOnConditions = 0
  mScreenOffReason = 3 mUserState = 0
  mBroadcastQueue = { -  1,-1,-1}
  mBroadcastWhy = {0,0,0}
  mPokey = 1 mPokeAwakeonSet = FALSE
  mKeyboardVisible =假mUserActivityAllowed = FALSE
  mKeylightDelay = 6000 mDimDelay = 47000 mScreenOffDelay = 7000
  米preventScreenOn =假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)
  米preventScreenOnPartialLock = 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 =真
  mAutoBrightessEnabled = FALSE
  mScreenBrightness:动画=假targetValue = -1 curValue = 0.0,δ= -1.3333334

mLocks.size = 0:

mPokeLocks.size = 1:
    捅锁PhoneApp:POKE_LOCK_IGNORE_CHEEK_EVENTS
 

解决方案

Android不释放wakelocks当过程结束。它应在结束之前明确释放通过的过程。

电量监控下载

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:

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?

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

解决方案

Android does not release wakelocks when the process ends. It should be explicitly released by the process before ending.