1

メソッドのようにウェイクロックを取得し、onCreate正常に動作します(権限も設定します):

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Wake lock");
wl.acquire();

ただし、次のようにリリースしようとすると:

@Override
protected void onDestroy() 
{
    super.onDestroy();
    wl.release();
}

なぜか解放されない。これはどのように可能ですか?何か案は ?

EDIT :私は、finish() を呼び出してから onDestroy() を呼び出す終了ボタンを持っています。終了ボタンを押して電話をスリープ状態にすると、プログラムが機能しないことが予想されますが、ロックが解除されていないことが示されます。

4

3 に答える 3

5

WakeLockをリリースするコードが機能するかどうかを判断する正しい方法はadb shell dumpsys power、リリースの前後に を使用して、リリースされているかどうかを確認することですWakeLock。他のアプリはいつでも要求して取得できるため、他の簡単WakeLocksなチェック (たとえば、画面がオフのときにアプリが実行されるかどうか) は信頼できません。

于 2013-01-16T16:31:42.527 に答える
1

release()コードをonPause()Activity の に変更します。Androidのドキュメントによると、Activityのacquire()を呼び出し、ActivityのonResume()wakelockを解放することが説明されていますonPause()。あなたの場合、アクティビティをスリープ状態にしていますが、破棄していないため、ウェイクロックは解放されません。に移動しonPause()ます。

于 2013-01-16T15:37:08.163 に答える
1

これが私の解決策です。isHeld()関数を使用してそれを行うことができます

 if (wl!= null && wl.isHeld()) {
    wl.release();
    wl= null;
 }
于 2016-10-24T12:21:21.547 に答える