Планирование Задач В Android

Привет Хабр! Предлагаю вашему вниманию вольный перевод статьи « Разумно планируйте задачи и задания в Android » Анкит Синхал.

В современной разработке приложений задачи часто выполняются асинхронно, и их объем выходит за рамки жизненного цикла приложения.

В некоторых ситуациях нам также приходится выполнять какую-то работу, но не обязательно делать это прямо сейчас.

Для планирования фоновой работы Android представил несколько API, которые мы можем разумно использовать в наших приложениях.

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

Для планирования задач на Android доступно несколько API:

  • Менеджер тревог
  • Планировщик заданий
  • Менеджер сети GCM
  • Диспетчер заданий Firebase
  • Адаптер синхронизации


Проблемы с услугами

Сервисы позволяют выполнять длительные операции в фоновом режиме.

Запуск служб в фоновом режиме очень негативно влияет на время автономной работы.

Особенно вредны службы, когда они постоянно используют ресурсы устройства, даже не выполняя полезных задач.



Запланированные задачи в течение жизненного цикла приложения

Когда приложение запущено и мы хотим запланировать или запустить задачу в определенное время, рекомендуется использовать класс Handler вместе с Timer и Thread.

Запланированные задачи при выключенном приложении



Менеджер тревог

AlarmManager обеспечивает доступ к службам уведомлений.

Это дает вам возможность выполнять любую операцию за пределами жизненного цикла вашего приложения.

Таким образом, вы можете инициировать события или действия, даже если ваше приложение не запущено.

AlarmManager может запустить службу в будущем.

Мы должны использовать API AlarmManager только для задач, которые необходимо запускать в определенное время.

Пример использования : Допустим, мы хотим выполнять задачу через 1 час или каждый час.

В этом случае нам поможет AlarmManager.

Планировщик заданий

Это основной из всех упомянутых вариантов планирования, который очень эффективен при фоновой работе.

API планировщика заданий , который был представлен в Android 5.0 (уровень API 21).

Этот API позволяет запускать задания, когда на устройстве доступно больше ресурсов или когда выполняются правильные условия.

Все условия можно определить при создании задачи.

Когда заявленные критерии будут выполнены, система выполнит эту задачу в ДжобСервис ваше приложение.

Планировщик заданий также отменяет выполнение, если это необходимо для соблюдения ограничений режима Дремать И Приложение в режиме ожидания .



Менеджер сети GCM

Сетевой менеджер GCM (Google Cloud Messaging) обладает всеми функциями планирования JobScheduler. GCM Network Manager также предназначен для выполнения повторяющихся или одноразовых неотложных задач, сохраняя при этом срок службы батареи.

Он используется для поддержки обратной совместимости, а также может использоваться под Android 5.0 (уровень API 21).

Начиная с уровня API 23 или выше, GCM Network Manager использует JobScheduler для платформы.

GCM Network Manager использует механизм планирования в Службах Google Play, поэтому этот класс будет работать только в том случае, если на устройстве установлены Службы Google Play. Google настоятельно рекомендовал пользователям GCM перейти на FCM и вместо этого использовать Firebase Job Manager для планирования любых задач.



Диспетчер заданий Firebase

Firebase JobDispatcher также является библиотекой для планирования фоновых заданий.

Он также используется для поддержки обратной совместимости (ниже API 21) и работает во всех последних версиях Android (API 9+).

Эта библиотека также будет работать, если на устройстве не установлены сервисы Google Play. В этом состоянии эта библиотека внутренне использует AlarmManager. Если на устройстве доступно приложение Google Play, оно использует механизм планирования в Сервисах Google Play.

Адаптер синхронизации

Адаптеры синхронизации разработаны специально для синхронизации данных между вашим устройством и облаком.

Его следует использовать только для такого типа задач.

Синхронизация может быть вызвана изменением данных в облаке или на устройстве, а также из-за прошедшего времени.

Система попытается синхронизироваться только тогда, когда устройство подключено к сети.



Упражнение

Мы обсудили достаточно теории, поэтому теперь давайте посмотрим, как использовать планировщик задач Android.

Создание службы занятости

Создавать JobSchedulerService расширяет JobService. который требует создания двух методов onStartJob (параметры Параметры задания ) И onStopJob (параметры Параметры задания ).

  
  
  
   

public class JobSchedulerService extends JobService { @Override public boolean onStartJob(JobParameters params) { return false; } @Override public boolean onStopJob(JobParameters params) { return false; } }

Метод onStartJob позвонил, когда Планировщик заданий решает заняться вашей работой.

ДжобСервис выполняется в основном потоке, поэтому любая логика должна выполняться в отдельном потоке.

Метод onStopJob вызывается, когда система решила, что вам следует прекратить работу.

Метод вызывается раньше jobFinished (JobParameters, логическое значение) .

Вам также необходимо зарегистрировать свою службу в AndroidManifest.

<application> <service android:name=”.

JobSchedulerService “ android:permission=”android.permission.BIND_JOB_SERVICE” android:exported=”true”/> </application>



Создайте объект JobInfo.

Чтобы построить объект Информация о вакансии , проходить ДжобСервис В JobInfo.Builder() как показано ниже.

Этот конструктор заданий позволяет вам устанавливать множество различных параметров управления при выполнении задания.



ComponentName serviceName = new ComponentName(context, JobSchedulerService.class); JobInfo jobInfo = new JobInfo.Builder(JOB_ID, serviceName) .

setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) .

setRequiresDeviceIdle(true) .

setRequiresCharging(true) .

build();



Запланированная задача

теперь у нас есть Информация о вакансии И ДжобСервис , а значит пришло время спланировать нашу работу.

Все, что нам нужно сделать, это запланировать работу с необходимыми Информация о вакансии как показано ниже:

JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); int result = scheduler.schedule(jobInfo); if (result == JobScheduler.RESULT_SUCCESS) { Log.d(TAG, “Job scheduled successfully!”); }



Заключение

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

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

Планировщик заданий прост в реализации и выполняет большую часть работы за вас.

С использованием Планировщик заданий наши запланированные задания сохраняются даже при перезагрузке системы.

На данный момент единственный недостаток Планировщик заданий заключается в том, что он доступен только для уровня API 21 (Android 5.0).

Теги: #Android #java #java #Разработка мобильных приложений #Разработка Android #api

Вместе с данным постом часто просматривают: