2013-04-04 3 views
10

Meine Android App bekam Crash-Bericht wie unten. (Sehr selten)WakeLock Unter gesperrt GCM_LIB

java.lang.RuntimeException: WakeLock under-locked GCM_LIB 
    at android.os.PowerManager$WakeLock.release(PowerManager.java:325) 
    at android.os.PowerManager$WakeLock.release(PowerManager.java:300) 
    at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:252) 

Wie java.lang.RuntimeException: WakeLock under-locked C2DM_LIB, könnte ich versuchen ~ fangen oder mit isHeld()

aber ich bin nicht Sicher, das ist die beste Lösung und ich möchte wissen, warum das passiert.

Einige Vermutung ist, dass BroadcastReceiver und Service in verschiedenen Prozess wie http://groups.google.com/group/cw-android/browse_thread/thread/9716bc101ce72fb4.

Aber ist das überhaupt möglich? Ich habe nie Android verwendet: Prozess in Manifest, so BroadcastReceiver und Service sollten im selben (Haupt-) Prozess sein, sollten sie nicht?

+0

Verwenden Sie die Acquire (Timeout) -Methode für den Erwerb des Wakelock? – edoardotognoni

+0

Es ist doppelt vorhanden: http://stackoverflow.com/a/12142013/450148 –

Antwort

3

+ NoraBora Dies ist ein Fehler von GCM lib, den Sie in Ihr Projekt aufgenommen haben. Dieser Fehler ist immer noch da in r3 Version des gcm.jar ist

Sie können mehr Informationen in dieser Ausgabe finden Thema: https://code.google.com/p/android/issues/detail?id=36364#makechanges

Wie Mark sagte:

Yup, lief in solche mit WakefulIntentService . Wenn Sie bereit sind, Ihren eigenen Fork von GCMBaseIntentService zu erstellen, wickeln Sie den Aufruf von WakeLock release() in einem Check von isHeld() um diesen Absturz zu vermeiden.