我一直在試圖安排一個使用AlarmManager類反覆運行的Android服務,但服務在幾天後不再被調用。本來我一直在使用下面的代碼,試圖做到這一點:使用AlarmManager安排的Android服務在幾天後不再被調用
Intent alarmIntent = new Intent(currentActivity.getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(currentActivity.getApplicationContext(),
AppManager.ALARM_PENDING_INTENT_REQUEST_CODE,
alarmIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)currentActivity.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(),
interval,
pendingAlarmIntent);
與接收器:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context _context, Intent _intent){
Intent serviceIntent = new Intent(_context.getApplicationContext(), PostLocationService.class);
_context.getApplicationContext().startService(serviceIntent);
}
}
這工作了幾天,然後突然停止。所以我改變了代碼,最初向接收者廣播一次,然後在每次服務運行時重新向接收者廣播。我這樣做了以下代碼:
Intent alarmIntent = new Intent(currentActivity.getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(currentActivity.getApplicationContext(),
AppManager.ALARM_PENDING_INTENT_REQUEST_CODE,
alarmIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)currentActivity.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,
interval,
pendingAlarmIntent);
不幸的是,這有同樣的結果;該服務在幾天後停止執行。
我還註冊了一個接收器,用於設備啓動時重新啓動與上述代碼相同的AlarmManager調用。
我錯過了什麼嗎?對於這種持續重複執行,有沒有比上述任何一種方法更好的方法?
你的服務必須在崩潰的所有報警準確傳遞。使它在啓動和停止時登錄到文件或Web服務器,以便查看它是否崩潰。另外,如果電話重新啓動警報丟失,則需要註冊BroadcastReceiver才能捕獲{android.intent.action.BOOT_COMPLETED},因爲您需要編輯應用程序清單文件。 https://stackoverflow.com/questions/12034357/does-alarm-manager-persist-even-after-reboot –