このページでは、アプリが保持している wake lock を解放する方法について説明します。電池の消耗を防ぐには、アプリが wake lock を使い終わったらすぐに解放することが重要です。
アクティブな wake lock を解放する
アクティブな wake lock を解放するには、その release()
メソッドを呼び出します。これにより、CPU に対する要求が取り下げられます。
たとえば、次のコードはウェイクロックを取得し、処理を実行してからウェイクロックを解放します。
Kotlin
@Throws(MyException::class) fun doSomethingAndRelease() { wakeLock.apply { try { acquire(WAKELOCK_TIMEOUT) doTheWork() } finally { release() } } }
Java
void doSomethingAndRelease() throws MyException { try { wakeLock.acquire(WAKELOCK_TIMEOUT); doTheWork(); } finally { wakeLock.release(); } }
wake lock は不要になったらすぐに解放するようにしてください。たとえば、バックグラウンド タスクの終了を許可するために wake lock を使用している場合は、タスクが終了したらすぐにロックを解除するようにします。
このコードに関する主なポイント
この例では、メソッド
doTheWork()
が例外をスローする可能性があります。そのため、コードはfinally
ブロックで wake lock を解放し、例外がスローされるかどうかに関係なく wake lock が解放されるようにします。設定したすべてのウェイクロックが確実に解放されるようにすることが非常に重要です。そのため、考えられるすべてのコードパスをチェックして、ウェイクロックがアクティブなまま残っていないことを確認する必要があります。WakeLock.acquire(long timeout)
でウェイクロックを取得することをおすすめします。この方法では、指定したタイムアウト期間の経過後にウェイクロックが自動的に解放されます。ただし、wake lock が不要になったら、明示的に解放して、必要以上に wake lock を保持しないようにする必要があります。