我需要我的應用程序每x分鐘執行一次方法。但是,x每次可能會有所不同:根據其他因素,它可以在15和60之間變化。重複任務每次不同的分鐘數
即使用戶關閉了應用程序,或者即使用戶重新啓動了手機,也必須執行此方法。
我想與AlarmManager,但我不知道是否是我的情況最好的方法。 是嗎?或者是AlarmManager是資源消耗方式?
我需要我的應用程序每x分鐘執行一次方法。但是,x每次可能會有所不同:根據其他因素,它可以在15和60之間變化。重複任務每次不同的分鐘數
即使用戶關閉了應用程序,或者即使用戶重新啓動了手機,也必須執行此方法。
我想與AlarmManager,但我不知道是否是我的情況最好的方法。 是嗎?或者是AlarmManager是資源消耗方式?
首先創建一個IntentService並覆蓋onHandleIntent:
@Override
protected void onHandleIntent(Intent intent) {
updateLocationInBackground(); // or whatever task you need to do every x minutes
scheduleNextUpdate();
}
這個方法簡單地做到這一點:
private void scheduleNextUpdate() {
new Scheduler().start();
}
調度線程應該是這樣的:
private class Scheduler extends Thread {
@Override
public void run() {
Intent i = new Intent(UserLocationUpdaterService.this, UserLocationUpdaterService.this.getClass());
PendingIntent pendingIntent = PendingIntent.getService(UserLocationUpdaterService.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
long currentTime = System.currentTimeMillis();
/* Replace this part with your computation as to when the next trigger should happen. Mine is set to fire off every 5 minutes.*/
long nextUpdateTimeMillis = currentTime + (5 * DateUtils.MINUTE_IN_MILLIS);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, nextUpdateTimeMillis, pendingIntent);
}
}
消防關閉此意向在主Activity上或者在某個具有的BroadcastReceiver上使用startService() BOOT_COMPLETED註冊,或兩者兼而有之。
UserLocationUpdaterService是實現IntentService的類,是不是?我收到錯誤:'方法getSystemService(String)對於類型調度程序'未定義「 – user2132478
調度程序類也應作爲內部類在IntentService中定義。當它調用getSystemService時,它實際上調用了intentService.getSystemService。 – josephus
創建Scheduler類的解釋是什麼,而不是在scheduleNextUpdate()方法的run()方法內寫入所有代碼? – user2132478
如果你想要一個真正有用的答案,你需要更多的細節,但聽起來像'AlarmManager'會是理想的。 – kabuko
AlarmManager沒問題,還有一個BOOT_COMPLETED接收器可以在電話重新啓動時重新安排鬧鐘。 – 323go