Tim*_*mmm 25 android process wakelock
出于某种原因,我的Android手机不会进入睡眠状态.我认为唤醒锁是保持清醒,但没有办法分辨哪些唤醒锁是活跃的.正在运行的服务没有列出任何可疑的东西,当然也没有什么不同.所以我的问题是:
当进程结束时,Android肯定会发布唤醒锁吗?有可能是一个应用程序写得不好而且在退出之前没有发布唤醒锁吗?
有没有办法看到活跃的唤醒锁?
这是dumpsys power显示:
$ 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
Run Code Online (Sandbox Code Playgroud)
obe*_*yan 24
在新版Android中,您可以在此处查看唤醒锁列表:
adb shell "cat /sys/kernel/debug/wakeup_sources"
Run Code Online (Sandbox Code Playgroud)
Bro*_*Lin 20
您可以使用以下adb命令来要求唤醒锁定
adb shell "echo mylock > /sys/power/wake_lock"
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令来监视此锁是否处于活动状态.您将看到时间列不断变化,这意味着唤醒锁定处于活动状态
watch -n 1 'adb shell "cat /proc/wakelocks" | grep mylock'
Run Code Online (Sandbox Code Playgroud)
现在,使用此adb命令释放唤醒锁定
adb shell "echo mylock > /sys/power/wake_unlock"
Run Code Online (Sandbox Code Playgroud)
然后,再次检查,时间列将冻结,这意味着唤醒锁定未激活
watch -n 1 'adb shell "cat /proc/wakelocks" | grep mylock'
Run Code Online (Sandbox Code Playgroud)
您可以使用相同的技术来观察您在代码中获得的唤醒锁定.
Com*_*are 15
当进程结束时,Android肯定会发布唤醒锁吗?
我对此表示怀疑,尽管我不确定.
有可能是一个应用程序写得不好而且在退出之前没有发布唤醒锁吗?
AFAIK,是的.
有没有办法看到活跃的唤醒锁?
跑adb shell dumpsys power.
就其价值而言,在 Android 7.1.1 上,这正是我所寻找的:
greatqlte:/ $ dumpsys power | grep WAKE_LOCK
PARTIAL_WAKE_LOCK 'ES Wake Lock' ACQ=-38m52s804ms LONG (uid=10275 pid=12504)
PARTIAL_WAKE_LOCK '*net_scheduler*' ACQ=-40ms (uid=10031 pid=3026 ws=Work Source{10031 com.google.android.gms})
Run Code Online (Sandbox Code Playgroud)