2014-04-03 39 views
2

我正在使用Alarm Manager每隔5分鐘獲取觸發器。 報警接收器延伸到WakefulBroadcastReceiver,並在收到報警觸發器時通過startWakefulService(context,service)啓動IntentService。在收到服務中onHandleIntent(Intent intent)方法的意圖後,應用程序會執行一些所需的內容,並在此方法結束時通過調用AlarmReceiver.completeWakefulIntent(intent)來釋放喚醒鎖定。來自WakefulBroadcastReceiver的連續警告消息

我的應用運行良好,但在logcat中,我看到WakefulBroadcastReceiver的警告消息。

Tag: WakefulBroadcastReceiver Warning message: No active wake lock id #1 

這些警告信息會隨着每次觸發而持續增加,並且#number每次都會增加。 我想知道是否有問題,由應用程序設置的警報,因爲消息的數量逐漸增加。或者僅僅是因爲警報鎖不是由警報管理器創建的,我的應用程序試圖通過completeWakefulIntent刪除它。

回答

3

最有可能的是startWakefulServiceonHandleIntent在不同的過程中執行。在這種情況下,調用靜態AlarmReceiver.completeWakefulIntent的行爲就好像它的工作方式一樣,但由於在該進程空間中找不到實際的喚醒鎖,因此您將收到該警告消息。

1

請確保您已正確鍵入WAKE_LOCK權限到您的Android清單。如果您忘記或錯誤鍵入了它,則startWakefulService將啓動該服務,但之後會默默失敗。在日誌貓中你不會看到任何明顯的問題。

在我的情況下,Android Studio自動完成'WAKE_LOCK'作爲小寫'wake_lock'。該服務確實開始,但startWakefulService永遠不會乾淨地返回,我通過日誌記錄進行了驗證。某種例外情況正在升溫。

public class FooBroadcastReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "Fpp receiver fired. Starting bar service"); 

     Intent serviceIntent = new Intent(context, BarService.class); 
     startWakefulService(context, serviceIntent); 
     Log.d(TAG, "Started bar service"); // << never reached! 
    } 

主要指示我有一個問題是「否活性喚醒鎖ID」消息表示每當BarService稱爲completeWakefulIntent在日誌中向上。

最後,我的麻煩都發生在代碼在同一物理過程中執行,所以第一個答案並不適用。

說明:我的體驗是運行Kitkat 4.4.2的Samsung Galaxy Note 10。