Android:как повторить службу с помощью AlarmManager каждые 15 минут, но только с 8:00 утра до 18: 00 вечера?
Мне нужно проверить обновление данных periodly, но данные обновляются только в дневное время, поэтому я хочу, чтобы это повторяющееся действие выполнялось только в этом разделе времени для экономии батареи и полосы пропускания.
Что делать?
2 ответов
если служба разговаривает с облаком с HTTP get/post / любыми запросами, то обратите внимание, что C2DM решение позволит увеличить срок службы батареи, и это SyncAdapter решение может обеспечить несколько преимуществ. (Я рекомендую смотреть видео ввода-вывода Google по обеим темам.)
следующий код делает что-то близкое к тому, о чем вы изначально спрашивали.
public class MyUpdateService extends IntentService
{
public MyUpdateService()
{
super(MyUpdateService.class.getSimpleName());
}
@Override
protected void onHandleIntent(Intent intent)
{
// Do useful things.
// After doing useful things...
scheduleNextUpdate();
}
private void scheduleNextUpdate()
{
Intent intent = new Intent(this, this.getClass());
PendingIntent pendingIntent =
PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// The update frequency should often be user configurable. This is not.
long currentTimeMillis = System.currentTimeMillis();
long nextUpdateTimeMillis = currentTimeMillis + 15 * DateUtils.MINUTE_IN_MILLIS;
Time nextUpdateTime = new Time();
nextUpdateTime.set(nextUpdateTimeMillis);
if (nextUpdateTime.hour < 8 || nextUpdateTime.hour >= 18)
{
nextUpdateTime.hour = 8;
nextUpdateTime.minute = 0;
nextUpdateTime.second = 0;
nextUpdateTimeMillis = nextUpdateTime.toMillis(false) + DateUtils.DAY_IN_MILLIS;
}
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent);
}
}
следуйте этим простым шагам, чтобы сохранить servce навсегда в android-устройстве. 1. Вызов службы с помощью Alarm manager каждые 15 минут. 2. возврат START_STICKY в методе onStart. 3. В on destroy вызовите Alarm manager и перезапустите службу с помощью метод startService. 4.(Необязательно)Повторите пункт 3 в методе onTaskRemoved.