Подтвердить что ты не робот

Как я могу видеть, какие аквариумы активны

По какой-то причине мой телефон Android не заснет. Я предполагаю, что вакелок не бодрствует, но нет способа сказать, какие аквариумы активны. Бегущие службы не перечисляют ничего подозрительного и, конечно же, ничего не отличаются от обычного. Поэтому мои вопросы:

  • Устанавливает ли Android определенную версию wakelocks при завершении процесса? Возможно, приложение было плохо написано и не выпустило wakelock перед выходом?

  • Есть ли способ увидеть активные wakelocks?

Вот что показывает 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
4b9b3361

Ответ 1

В новых версиях Android вы можете увидеть список wakelocks здесь:

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

Ответ 2

Вы можете использовать команду ниже adb, чтобы потребовать блокировку слежения

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

Затем вы можете использовать команду ниже, чтобы посмотреть, активна ли эта блокировка. Вы увидите, что временной стол непрерывно изменяется, это означает, что блокировка бодрствования активна.

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

Теперь, используйте эту команду adb для освобождения блокировки слежения

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

Затем, проверьте его снова, столбец времени замерзнет, ​​это означает, что блокировка следа неактивна

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

Вы можете использовать ту же технику, чтобы наблюдать за блокировкой следа, которую вы приобретаете в коде.

Ответ 3

Действительно ли Android освобождает wakelocks при завершении процесса?

Я сомневаюсь, хотя я не знаю наверняка.

Возможно ли, что приложение было плохо написано и не выпустило wakelock перед выходом?

AFAIK, да.

Есть ли способ увидеть активные wakelocks?

Запустите adb shell dumpsys power.

Ответ 4

Как уже говорили другие, сила dumpsys оболочки adb может показать вам активные wakelocks.

Однако для приложений, которые не выпускали wakelock, в соответствии с ответом здесь: fooobar.com/questions/129188/... Он должен быть выпущен Android. Однако это касается случая, когда приложение/процесс убит, но он должен применяться, когда приложение/процесс завершен. Он также предоставляет ссылки на исходный код, а не просто "проверенный код"

Ответ 5

Вы можете проверить приложение Wakelock Detector, которое доступно в Google Play

У этого есть простой пользовательский интерфейс, который показывает подробный список приобретенных wakelocks для каждого приложения и, как вы упомянули, на нем отображаются активные запущенные приложения, которые могут иметь wakelock на данный момент.

Детектор Wakelock

Ответ 6

Android не выпускает wakelocks, когда процесс заканчивается. Он должен быть явно выпущен процессом до окончания.