出于某种原因,我的Android手机不会进入睡眠状态。我认为一个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.