我需要我的应用程序每x分钟执行一次方法。但是x每次都可以不同:它可以在15到60之间变化,具体取决于其他因素。
即使用户已关闭应用程序,或者即使用户已重新启动手机,也必须执行该方法。
我正在尝试使用AlarmManager,但我不知道这是否是我案例的最佳方式。 是吗?或者AlarmManager是一种资源消耗方式?
答案 0 :(得分:0)
首先创建一个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);
}
}
使用startService()在您的主Activity或已注册BOOT_COMPLETED的某些BroadcastReceiver上,或两者同时触发此Intent。