wake tutorial power note manager lock lite injector extender detector blocker amplify android process wakelock

android - tutorial - wakelock detector sin root



¿Cómo puedo ver qué wakelocks están activos? (7)

Por alguna razón mi teléfono Android no se va a dormir. Supongo que un wakelock lo mantiene despierto, pero no hay forma de saber qué wakelock están activos. Los servicios en ejecución no enumeran nada sospechoso, y ciertamente nada diferente de lo habitual. Así que mis preguntas son:

  1. ¿Android lanza definitivamente wakelocks cuando finaliza un proceso? ¿Es posible que una aplicación esté mal escrita y no haya lanzado un wakelock antes de salir?

  2. ¿Hay alguna manera de ver los wakelocks activos?

Esto es lo que muestra 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


¿Android lanza definitivamente wakelocks cuando finaliza un proceso?

Lo dudo, aunque no lo sé a ciencia cierta.

¿Es posible que una aplicación esté mal escrita y no haya lanzado un wakelock antes de salir?

AFAIK, sí.

¿Hay alguna manera de ver los wakelocks activos?

Ejecute adb shell dumpsys power .


Android no libera wakelocks cuando finaliza el proceso. Debe ser liberado explícitamente por el proceso antes de terminar.


Como ya han dicho otros, adb shell dumpsys power puede mostrarte wakelocks activos.

Sin embargo, para aplicaciones que no lanzaron wakelock, según la respuesta aquí: https://.com/a/16258624/428271 Debería ser lanzado por Android. Sin embargo, es para el caso en el que se elimina la aplicación / proceso, pero debe ser aplicable cuando la aplicación / proceso también se completa. También proporciona las referencias del código fuente en lugar de solo decir ''código ingresado''


En las nuevas versiones de Android puedes ver la lista de wakelocks aquí:

adb shell "cat /sys/kernel/debug/wakeup_sources"


Para ver el funcionamiento de los bloqueos de activación activos:

adb shell dumpsys power | grep -i wake


Puede usar el siguiente comando adb para requerir un bloqueo de activación

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

Luego, puede usar el siguiente comando para ver si este bloqueo está activo. Verá que la columna de tiempo cambia continuamente, significa que el bloqueo de activación está activo

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

Ahora, use este comando adb para liberar el bloqueo de activación

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

Luego, verifique nuevamente, la columna de tiempo se congelará, significa que el bloqueo de activación no está activo

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

Puede utilizar la misma técnica para observar el bloqueo de activación que obtiene en el código.


Puede verificar la aplicación " Detector de Wakelock " que está disponible en Google Play

Tiene una interfaz de usuario simple que muestra la lista detallada de wakelocks adquiridos para cada aplicación y, como usted mencionó, muestra las aplicaciones activas en ejecución en la parte superior, que podrían tener wakelock presente en este momento.

Detector de wakelock