2013-04-04 15 views
10

Mój android app dostał raport zderzeniowych jak poniżej. (Bardzo rzadko)blokada wybudzenia pod zablokowana 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) 

Jak java.lang.RuntimeException: WakeLock under-locked C2DM_LIB, mógłbym spróbować ~ catch lub korzystając isHeld()

ale nie jestem na pewno jest to najlepsze rozwiązanie i chcę wiedzieć, dlaczego tak się dzieje.

Niektórzy przypuszczają, że BroadcastReceiver i usługa w różnych procesach jak http://groups.google.com/group/cw-android/browse_thread/thread/9716bc101ce72fb4.

Ale czy to możliwe? Nigdy nie używałem androida: proces w manifeście, więc BroadcastReceiver i Service powinny być w tym samym (głównym) procesie, czyż nie?

+0

Czy używasz metody nabywania (timeout) do nabycia wakelock? – edoardotognoni

+0

Jest to duplikat: http://stackoverflow.com/a/12142013/450148 –

Odpowiedz

3

+ NoraBora to błąd z biblioteki GCM dołączonej do projektu. Ten błąd jest nadal w R3 wersji gcm.jar

można znaleźć więcej informacji w tym wątku problem: https://code.google.com/p/android/issues/detail?id=36364#makechanges

Jak powiedział Mark:

Tak, wpadł tych z WakefulIntentService . Jeśli chcesz utworzyć własny widelec GCMBaseIntentService, utwórz wywołanie funkcji zwalniającej WakeLock w funkcji isHeld(), aby uniknąć tej awarii.