web-dev-qa-db-ja.com

アクティブなウェイクロックを確認するにはどうすればよいですか

何らかの理由で、私のAndroid電話はスリープ状態になりません。ウェイクロックがスリープ状態を維持していると思いますが、どのウェイクロックがアクティブかを知る方法はありません。実行中のサービスは疑わしいものは何でもリストアップし、確かにいつもと違うものは何もありません。

  1. Androidプロセスの終了時にウェイクロックを確実に解放しますか?アプリが誤って作成され、終了前にウェイクロックを解放しなかった可能性はありますか?

  2. アクティブなウェイクロックを確認する方法はありますか?

これは何 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
25
Timmmm

Android=の新しいバージョンでは、ウェイクロックのリストをここで見ることができます:

adb Shell "cat /sys/kernel/debug/wakeup_sources"
23
obezyan

以下の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'

同じ手法を使用して、コードで取得するウェイクロックを確認できます。

20
Browny Lin

Androidプロセスの終了時にウェイクロックを確実に解放しますか?

確かではありませんが、私はそれを疑います。

アプリが不適切に作成され、終了する前にウェイクロックをリリースしなかった可能性はありますか?

わかった、はい。

アクティブなウェイクロックを確認する方法はありますか?

実行adb Shell dumpsys power

15
CommonsWare

他の人がすでに言ったように、adb Shell dumpsys powerはアクティブなウェイクロックを表示できます。

ただし、ここでの答えによると、wakelockをリリースしなかったアプリの場合は、 https://stackoverflow.com/a/16258624/428271 Androidでリリースする必要があります。ただし、これはアプリ/プロセスが強制終了される場合のためですが、アプリ/プロセスが完了した場合にも適用できるはずです。また、単に「チェックインされたコード」と言うのではなく、ソースコード参照を提供します。

6
Kiran Parmar

Google Playで利用可能な「Wakelock Detector」アプリを確認できます

各アプリケーションごとに取得したウェイクロックの詳細リストを表示するシンプルなUIがあり、前述のように、上部にアクティブな実行中アプリが表示されますwakelockは現在存在しています。

ウェイクロック検出器

3
UzumApps

アクティブなウェイクロックを実行するには、次を実行します。

adb Shell dumpsys power | grep -i wake

2
crissyg

価値があるものについては、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})                                                               
0
user1261470

Androidは、プロセスの終了時にウェイクロックを解放しません。終了する前にプロセスによって明示的に解放される必要があります。

0
Eastern Monk