我遇到了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%肯定這些部件工作正常。
所以我堅持只有一些爲什麼它不工作的理論。
我認爲這可能與我斷開手機與調試器的連接,但在這種情況下,警報似乎可以在短時間內工作。
所以我的主要理論是,我創建的報警管理器在一段時間後會被刪除?如果這是真的,那麼這是一個很大的問題,因爲無論經過多少時間,我都需要這個工作。
任何幫助確保我的報警仍然是非常感謝,謝謝。
感謝您的回覆。我已更新了我的問題。 WakeLock的想法聽起來很有希望。這可能是因爲我的Android沒有給我的服務時間來執行它的代碼。我100%確定警報設置正確,因爲我已經完成了很多測試,而且似乎失敗的唯一時間是如果我在一夜之間不接觸我的手機。使用多個Intents可能會更安全,因爲我已經在這裏基本上製作了一個菊花鏈,但是會有很多Intent影響性能/電池? – Demonofloom 2011-01-28 13:37:25