私はこのアンドロイドの実装を理解しようとしていますが、静的フィールドlockStaticが揮発性である理由を理解できません。なぜなら、その使用はgetLockメソッドだけであり、同期ブロックなので、並行性またはオブジェクト出版の問題。なぜAndroid用のlockStaticは揮発性ですか?
abstract public class WakefulIntentService extends IntentService {
abstract protected void doWakefulWork(Intent intent);
static final String NAME=
"com.commonsware.cwac.wakeful.WakefulIntentService";
static final String LAST_ALARM="lastAlarm";
private static volatile PowerManager.WakeLock lockStatic=null;
synchronized private static PowerManager.WakeLock getLock(Context context) {
if (lockStatic == null) {
PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
lockStatic=mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, NAME);
lockStatic.setReferenceCounted(true);
}
return(lockStatic);
}
私はlockStaticはそれで他の方法でのアクセスが、そのプライベートと唯一の方法のウィッヒお得な情報がGETLOCK方法で許可された場合には揮発性のためにのみ必要があるだろう見る方法。これは単なる主張ですか、それとも背後にある他の理由がありますか?
この問題を解決する助けを前もってありがとうございます。サンプルコードで
私は、ダブルチェックロック実装をサポートしていると確信しています。しかし、一般に、「なぜDeveloper Xは何をやったのですか?」と尋ねるスタックオーバーフローにはあまり適していません。確実に答えられるのはDeveloper Xだけです。この場合、私はDeveloper Xです。数年前にこのコードを書きました。他に誰も明確に答えることはできません。 – CommonsWare
@CommonsWare主要なフレームワークコードの作成者が説明しているように見えるのは、まあまあです。 – chrylis