28

何らかの理由で、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
4

8 に答える 8

27

Android の新しいバージョンでは、ここでウェイクロックのリストを確認できます。

adb shell "cat /sys/kernel/debug/wakeup_sources"
于 2014-09-23T10:23:37.607 に答える
22

以下の adb コマンドを使用して、wake lock を要求できます

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

次に、以下のコマンドを使用して、このロックがアクティブかどうかを監視できます。時間列が連続的に変化するのが表示されます。これは、ウェイクロックがアクティブであることを意味します

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

さて、このadbコマンドを使ってwake lockを解除してください

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

次に、もう一度確認します。時間列がフリーズします。これは、ウェイクロックがアクティブでないことを意味します

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

同じ手法を使用して、コードで取得した wake lock を観察できます。

于 2012-06-08T08:59:15.400 に答える
16

プロセスが終了すると、Android は確実にウェイクロックを解放しますか?

確かなことはわかりませんが、私はそれを疑っています。

アプリの書き方が悪く、終了する前にウェイクロックを解放しなかった可能性はありますか?

私の知る限り、はい。

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

実行しますadb shell dumpsys power

于 2011-04-25T17:04:21.587 に答える
7

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

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

于 2014-01-22T08:18:25.027 に答える
3

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

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

ウェイクロック検出器

于 2013-03-04T04:47:00.330 に答える
-1

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

于 2012-02-12T14:15:56.727 に答える