Каковы подходящие места для вызова различных компонентов Android планирования? - PullRequest
0 голосов
/ 21 января 2019

Мне нужно знать, какой компонент Android я должен использовать для планирования задачи, мне нужно выполнить задачу, которая будет обновлять данные приложения с сервера каждые 3 минуты (следовательно, я не могу использовать JobScheduler или SyncAdapter, оба ограничены минимум 15интервал опроса минут).

Так что же является лучшей альтернативой?

  1. TimerTask
  2. Обработчик
  3. ThreadPoolExecuter
  4. ScheduledThreadPoolExecutor

Если возможно, просьба указать, где мы должны использовать эти компоненты.

1 Ответ

0 голосов
/ 21 января 2019

Вы можете использовать библиотеку Android-Job из Evernote

implementation 'com.evernote:android-job:1.2.6'

Утилита для Android для запуска заданий, отложенных в фоновом режиме. В зависимости от версии Android используются JobScheduler, GcmNetworkManager или AlarmManager

Использование Класс JobManager служит точкой входа. Ваша работа должна продлить класс Работа . Создайте JobRequest с соответствующим классом построителя и запланируйте этот запрос с помощью JobManager .

Прежде чем вы сможете использовать JobManager , вы должны инициализировать синглтон. Вам нужно предоставить Context и добавить реализацию JobCreator после этого.

JobCreator отображает тег задания на определенный класс задания. Рекомендуется инициализировать JobManager в методе onCreate () вашего объекта Application, но есть альтернатива, если у вас нет доступа к классу Application.

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        JobManager.create(this).addJobCreator(new DemoJobCreator());
    }
}

public class DemoJobCreator implements JobCreator {

    @Override
    @Nullable
    public Job create(@NonNull String tag) {
        switch (tag) {
            case DemoSyncJob.TAG:
                return new DemoSyncJob();
            default:
                return null;
        }
    }
}

После этого вы можете начать планирование заданий.

public class DemoSyncJob extends Job {

    public static final String TAG = "job_demo_tag";

    @Override
    @NonNull
    protected Result onRunJob(Params params) {
        // run your job here
        return Result.SUCCESS;
    }

    public static void scheduleJob() {
        new JobRequest.Builder(DemoSyncJob.TAG)
                .setExecutionWindow(30_000L, 40_000L)
                .build()
                .schedule();
    }
}

Это расширенная версия Планировщика заданий по умолчанию в Android и обладающая большими возможностями, чем стандартная, имеющая множество ограничений и совместимость с предыдущими версиями.

...