編輯:澄清基於CommonsWare的回答如何創建一個持久AlarmManager
我們的通過AlarmManager調度警報,以每60秒觸發的問題。當我們的應用程序被終止時,我們的警報似乎不再執行。即使應用程序被手動或系統中止,是否有辦法使這些警報持續存在?
這對我們來說是個問題,因爲我們有一個顯示時間的小部件應用程序。這意味着我們需要每分鐘更新一次。爲了解決AppWidgetProvider的onUpdate方法的30分鐘更新限制,我們使用AlarmManager。它通常工作得很好,但有些用戶報告時間不同步。在與其中幾個人交談之後,我懷疑我們的應用程序是通過任務殺手應用程序手動殺死的,或者Android本身正在殺死我們的應用程序。
到根問題(保持時間同步中的微件)的任何其它替代解決方案歡迎爲好。
這是我們執行安排我們的報警代碼:
Intent intent = new Intent(UPDATE_TIME);
PendingIntent pIntent = PendingIntent.getBroadcast(ctx,
0 /* no requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// get alarm params
Date d = new Date();
long timeTilMinuteChange = 60*1000-d.getSeconds()*1000;
long startTime = System.currentTimeMillis() + + timeTilMinuteChange;
AlarmManager am = (AlarmManager) ctx.getSystemService(Context.
am.cancel(pIntent);
am.set(AlarmManager.RTC, System.currentTimeMillis(), pIntent);
am.setRepeating(AlarmManager.RTC, startTime, 60000, pIntent);
我認爲Alarm Manager沒有被殺死,但也許數據變得陳舊了。你在使用靜態變量嗎?請記住,appwidget進程可以並且將被Android關閉(它是一個接收器),您是否使用綁定到AppWidgetProvider類的任何變量? – 2012-02-01 20:04:06
我沒有使用靜態變量,但我正在使用靜態類。本質上,它的工作方式是我們的AppWidgetProvider調用TimeManager.start(context)。 TimeManager.start設置重複警報。 – christoff 2012-02-01 23:29:08
@EfiMK我知道它的一個很老的帖子,但由於我無法在其他地方找到答案,所以請指導在appwidgetprovider類中使用靜態變量的問題。 – Atihska 2013-07-22 23:49:42