2011-01-28 38 views
4

我遇到了Android的Alarmmanager功能問題。Android alarmmanager不太可靠

問題是超過一個小時左右的警報等待無法熄滅。

我的應用程序首先創建一個報警像這樣: -

PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, mCal.getTimeInMillis(), sender); 

當警報響起時它會觸發我的RecieverHandler類,特別是這樣的功能: -

public void onReceive(Context context, Intent intent) 
    { 
     try { 
      Bundle bundle = intent.getExtras(); 


      Intent newIntent = new Intent(context, MessageDispatcher.class); 
      newIntent.putExtras(bundle); 
      // newIntent.addFlags(Intent.FLAG); 
      context.startService(newIntent); 



      } catch (Exception e) { 
      Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 

      } 


    } 

這然後啓動一個服務MessageDispatcher的名稱和此函數被稱爲: -

public int onStartCommand(Intent intent, int flags, int startId) 

This功能從我的數據庫獲取下一個報警時間,這個我肯定是工作正常,然後設置基於日期從數據庫中像這樣一個新的報警: -

PendingIntent sender = PendingIntent.getBroadcast(this, 192837, newIntent, PendingIntent.FLAG_UPDATE_CURRENT); 


    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, mCal.getSendAt().getTimeInMillis(), sender); 

這爲下一個消息的報警。

我已經在短時間內測試過它,它似乎可以正常工作,並通過在手機中更改我的日期和時間在大量時間內進行了測試。它似乎成功解僱了。

然後當這個警報消失時,它會得到下一個警報,並安排它。我幾乎100%肯定這些部件工作正常。

所以我堅持只有一些爲什麼它不工作的理論。

我認爲這可能與我斷開手機與調試器的連接,但在這種情況下,警報似乎可以在短時間內工作。

所以我的主要理論是,我創建的報警管理器在一段時間後會被刪除?如果這是真的,那麼這是一個很大的問題,因爲無論經過多少時間,我都需要這個工作。

任何幫助確保我的報警仍然是非常感謝,謝謝。

回答

2

所以我的主要理論是,我創建的報警管理器在一段時間後會被刪除?

已註冊的警報仍登記,直至您取消它們,或者直到下次重啓,或直到用戶與Android 2.1和更早的一個「任務殺手」殺死你的應用程序。

您還沒有表明:

  • 你是如何確定報警是否「走出關」
  • 什麼BroadcastReceiver

沒有這些信息,就不可能說你出錯的地方。

確保無論你正在做所有的工作在BroadcastReceiver(如果工作是非常快的),或者你正在維護自己的WakeLock當你經過控制所從事的工作,其餘的IntentService。查看WakefulIntentService獲取更多信息。

此外,您可能會嘗試爲每個鬧鐘創建獨特的Intents,而不是更新當前的鬧鐘。我不知道這裏有一個特別的問題,但它讓我感到緊張。

+0

感謝您的回覆。我已更新了我的問題。 WakeLock的想法聽起來很有希望。這可能是因爲我的Android沒有給我的服務時間來執行它的代碼。我100%確定警報設置正確,因爲我已經完成了很多測試,而且似乎失敗的唯一時間是如果我在一夜之間不接觸我的手機。使用多個Intents可能會更安全,因爲我已經在這裏基本上製作了一個菊花鏈,但是會有很多Intent影響性能/電池? – Demonofloom 2011-01-28 13:37:25