Планирование запуска задачи каждые 24 часа - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь создать приложение для Android, которое увеличивает счетчик каждые 24 часа.Я просто использую SharedPreferences, и когда приходит время, он увеличивает значение в общих настройках.Прямо сейчас я использовал FirebaseJobDispatcher, но проблема с этим заключалась в том, что он не согласован с приращением.Я прочитал некоторые документы, и я понимаю, что лучше использовать FirebaseJobDispatcher, когда он также включает некоторые сетевые вызовы.Мой вопрос заключается в том, как я могу запланировать простую работу в Android для запуска каждые 24 часа?Пожалуйста, любая помощь и предложения будут очень полезны.Ниже мой код FirebaseJobDispatcher.Сейчас я просто использую 2 минуты для проверки.

public class ScheduleIncrementJob {

private static final int UPDATE_INTERVAL_MINUTES = 2;
private static final int UPDATE_INTERVAL_SECONDS = (int)(TimeUnit.MINUTES.toSeconds(UPDATE_INTERVAL_MINUTES));
private static final int SYNC_FLEX_SECONDS = UPDATE_INTERVAL_SECONDS;

private static final String UPDATE_JOB_TAG = "update_counter_tag";

private static boolean sInitialized;

synchronized public static void scheduleUpdateCounter(final Context context){
    if(sInitialized)return;

    Driver driver = new GooglePlayDriver(context);
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(driver);

    Job constraintUpdateJob = dispatcher.newJobBuilder()
            .setService(IncrementJobService.class)
            .setTag(UPDATE_JOB_TAG)
            .setLifetime(Lifetime.FOREVER)
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(UPDATE_INTERVAL_SECONDS,
                    UPDATE_INTERVAL_SECONDS + SYNC_FLEX_SECONDS))
            .setReplaceCurrent(true)
            .build();
    dispatcher.schedule(constraintUpdateJob);
    sInitialized = true;
}
}

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете использовать класс AlarmManager для планирования повторяющегося сигнала тревоги с PendingIntent, который будет выполнять вашу работу по расписанию. https://developer.android.com/training/scheduling/alarms

Я дам вам пример ежедневной тревоги, выполняющей работу при увольнении:

 public void setDailyAlarmOn(Context context, long alarmTime, Uri reminderTask, long repeatTime) {
        AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);


        PendingIntent operation =
                yourJobHere.getReminderPendingIntent(context, reminderTask);

        if (Build.VERSION.SDK_INT >= 23) {

            manager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, repeatTime, operation);
        } else {
            manager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime,  repeatTime, operation);
        }

    }

alarmTime - впервые за миллисекунды, когда предполагается срабатывание тревоги
repeatTime - время в миллисекундах - 86400000 за 24 часа (1000 * 60 * 60 * 24)
Uri RemderTask - URI, который я создал, чтобы не отменять предыдущие тревоги, короче говоря, это код приложения тревоги, и это URI из строки в базе данных.
операция - PendingIntent, которую вам нужно будет создать

Я сделал это, расширив IntentService и обработав задание в onHandleIntent: YourJobHere.class:

public class YourJobHere extends IntentService {
    private static final String TAG = YourJobHere.class.getSimpleName();

    public static PendingIntent getReminderPendingIntent(Context context, Uri uri) {
        Intent action = new Intent(context, YourJobHere.class);
        action.setData(uri);
        return PendingIntent.getService(context, 0, action, PendingIntent.FLAG_UPDATE_CURRENT);
    }

    public YourJobHere() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {

        //TODO: make your job here

      }
}

Если хотите, можете обратиться к моему полному проекту на GitLab: https://gitlab.com/Domin_PL/SlothProfileScheduler

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...