2013-04-04 13 views
10

ứng dụng Android của tôi đã báo cáo vụ tai nạn như dưới đây. (Rất hiếm)WakeLock dưới khóa 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) 

Giống như java.lang.RuntimeException: WakeLock under-locked C2DM_LIB, tôi có thể thử ~ bắt hoặc sử dụng isHeld()

nhưng tôi không chắc chắn đây là giải pháp tốt nhất và tôi muốn biết tại sao điều này lại xảy ra.

Một số người đoán là BroadcastReceiver và Dịch vụ trong quá trình khác nhau như http://groups.google.com/group/cw-android/browse_thread/thread/9716bc101ce72fb4.

Nhưng điều này có thể thực hiện được không? Tôi không bao giờ sử dụng android: quy trình trong tệp kê khai, do đó, BroadcastReceiver và Dịch vụ phải ở trong cùng một quy trình (chính), phải không?

+0

Bạn có đang sử dụng phương thức có được (thời gian chờ) để lấy khóa wakelock không? – edoardotognoni

+0

Nó bị trùng lặp: http://stackoverflow.com/a/12142013/450148 –

Trả lời

3

+ NoraBora đây là lỗi từ lib GCM mà bạn đưa vào dự án của mình. lỗi này vẫn còn đó trong r3 phiên bản của gcm.jar

Bạn có thể tìm thêm thông tin trong chủ đề này Vấn đề: https://code.google.com/p/android/issues/detail?id=36364#makechanges

Như Mark cho biết:

Yup, chạy vào những người có WakefulIntentService . Nếu bạn sẵn sàng để tạo ngã ba GCMBaseIntentService của riêng mình, hãy bọc WakeLock bản phát hành() gọi bằng séc isHeld() để tránh sự cố này.