2010-12-13 2 views
0

Kann jemand erklären, wofür diese Methode von PowerManager.Wakelock ist?Wakelock Reference Count

setReferenceCounted

"Wake Sperren Referenz werden standardmäßig gezählt." - Warum?

+0

Es wurde ein Fehler in dieser Hinsicht gefunden ... Hoffe, du bist nicht der Einzige, der diese Frage aufwirft http://code.google.com/p/android/issues/detail?id=5958 – DeRagan

+0

Ok. Für jede Veröffentlichung, die du auf dem Schloss machst, musst du es vorher erworben haben, um keine Ausnahme zu machen. Ich kann damit leben :) Danke für diesen Rat. – cody

Antwort

6

Weil es in vielen Fällen wirklich praktisch ist, sie als Referenz zu zählen.

Nehmen Sie WakefulIntentService als ein Beispiel. Ich muss dafür sorgen, dass der Dienst das Gerät lange genug wach hält, um die Arbeit zu erledigen, die ihm in die Wege geleitet wurde, aber sobald die Arbeit erledigt ist, kann das Gerät wieder einschlafen. Der einfachste Weg, dies zu tun, ist die Verwendung eines Referenzzählers WakeLock, so dass wir die Referenzzahl für jedes Stück Arbeit anheben und die Referenzzählung verringern, wenn die Arbeit erledigt ist. Wenn der Referenzzähler Null erreicht, gibt Android WakeLock frei und das Gerät kann wieder einschlafen.

Es kann durchaus Szenarien geben, in denen ein nicht referenzgezähltes WakeLock nützlich wäre, obwohl ich dafür kein Beispiel habe.

+0

Das beantwortet meine Frage. Vielen Dank! – cody

+0

Wie können wir den Referenzzählwert erhöhen/verringern? –

+0

@PareshMayani: Es wird inkrementiert, wenn Sie '()' es aufnehmen und dekrementieren, wenn Sie es freigeben(). – CommonsWare