CWACウェイクフル ライブラリのWakefileIntentService.javaでは、コードに次のものが含まれています。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
PowerManager.WakeLock lock = getLock(this.getApplicationContext());
if (!lock.isHeld() || (flags & START_FLAG_REDELIVERY) != 0) {
lock.acquire();
}
super.onStartCommand(intent, flags, startId);
return(START_REDELIVER_INTENT);
}
コードがチェックする理由START_FLAG_REDELIVERY
- 次のシナリオを妨げるものは何ですか?
onStartCommand()
が呼び出され、ロックが取得されます。- システムは完了する前にサービスを強制終了します。
- システムは でインテントを再配信し、すでに保持されているロックで
START_FLAG_REDELIVERY
別の呼び出しを引き起こします。acquire()
- サービスが完了し、
release()
1 回呼び出されます。 - 参照カウント ロックは、2 回取得されたが解放されたのは 1 回だけであるため、永久に保持されます。