Фоновые задачи
Фоновые задачи позволяют выполнять дополнительные процессы в фоновом режиме, не замедляя основную работу системы. Это может быть полезно, например, для выполнения резервного копирования данных, обновления программного обеспечения, мониторинга состояния аппаратуры и других задач, которые требуют непрерывного выполнения.
Фоновые задачи делятся на следующие типы:
- периодические повторяющиеся фоновые задачи ("periodic");
- фоновые задачи для обработки событий ("push");
- одноразовая фоновая задача ("worker");
- фоновые задачи по расписанию: одноразовые или повторяющиеся ("scheduled").
Рекомендовано не использовать прежние методы создания фоновых процессов в приложениях. В будущих релизах Авроры фоновые процессы будут ограничены для всех приложений, например, могут быть остановлены/заморожены, когда приложение неактивно.
API для работы с фоновыми задачами является частью libruntime-manager
.
Используемый класс — это класс Tasks
.
Содержание:
- Среда приложения
- Создание фоновых задач и управление ими
- Периодические задачи
- Условия выполнения фоновых задач
- Ограничения времени выполнения
- Обработка событий
- Взаимодействие с приложениями
Среда приложения
Следующие переменные среды установлены менеджером и доступны для фоновых задач:
AURORA_APP_ID
— идентификатор приложения, которому принадлежит задача.AURORA_TASK_ID
— полный идентификатор фоновой задачи. Если один и тот же двоичный файл используется как для приложения, так и для его фоновых задач, эту переменную можно использовать, чтобы понять, в каком режиме выполняется процесс.AURORA_TASK_FD
— файловый дескриптор прослушивающего сокета. Приложение (или другие фоновые задачи) может подключаться к этому сокету для обмена данными.
Создание фоновых задач и управление ими
Приложения, использующие фоновые задачи, требуют их описания в desktop-файле. Описание должно содержать тип и параметры, если требуется, для каждого типа создаваемых фоновых задач. Запуск второго экземпляра фоновой задачи того же типа независимо от значения в desktop-файле невозможен.
Также, независимо от значения в desktop-файле, нельзя получить доступ к камере и микрофону для фоновых задач.
Пример desktop-файла:
[X-Task <TASK_ID>]
Type=[periodic|worker|location|push|<more-domain-specific-events>]
# Строка Exec может быть опущена, и в этом случае будет
# выполнен тот же исполняемый файл, что и для приложения.
Exec=/usr/bin/runner
# Строка разрешений может быть опущена, в этом случае задача будет
# иметь только базовый профиль.
Permissions=Internet;...
# Условия=<условие1>;<условие2>;<условие3>
# Двоеточие может использоваться для указания дополнительного условия, например "Интернет: Wi-Fi"
Conditions=idle
...параметры, зависящие от типа...
Реализовать фоновую задачу можно:
- в отдельном исполняемом файле;
- в исполняемом файле приложения.
Периодические задачи
Периодические задачи используются для выполнения короткой работы через определенные промежутки времени. Можно передать как параметры в методы класса Task максимальные границы времени, в течение которого будет выполняться задача. Описания ограничений на время выполнения и интервал запуска задач находятся в разделе Ограничения времени выполнения. При использовании некорректных аргументов возвращается и логируется сообщение об ошибке.
Параметры передаются во время выполнения приложения. В desktop-файле их задать нельзя.
Существует возможность задать время запуска задачи (дата и время с точностью до минуты) и возобновлять задачу при каждом перезапуске ОС. При необходимости так же можно задавать параметры для регулярного запуска фоновой задачи:
- время начала и окончания запусков фоновой задачи;
- параметры повтора (по каким месяцам, дням недели, часам и т.д. нужно повторять запуск).
Расписание может быть скорректировано приложением или самой задачей при условии, что оно не должно предоставлять процессу более щедрое расписание, чем указано в desktop-файле.
Примечание:
При невыполнении условий для запуска периодической фоновой задачи запуск повторяется. После успешного запуска отсчитывается начальный интервал периодической задачи с момента успешного запуска.
Условия выполнения фоновых задач
В desktop-файл может быть добавлена строка "Conditions", задающая условия фоновых задач. Список поддерживаемых условий:
-
internet
: значение истинно, если доступно подключение к Интернету; Доступны следующие дополнительные условия:Wi-Fi
: подключение осуществляется через сеть Wi-Fi;ethernet
: подключение осуществляется через адаптер ethernet;cellular
: подключение осуществляется через сотовую сеть.
-
idle
: истинно, когда устройство находится в режиме ожидания; -
charging
: истинно, когда устройство заряжается; -
battery-not-low
: батарея не разряжена.
Ограничения времени выполнения
Существует два ограничения на время работы фоновых задач:
- для задач типа "worker", "periodic" и "scheduled" на каждый запуск: задача не может длиться больше 15 минут;
- для задач типа "periodic" и "scheduled" существует дополнительное ограничение на интервал запуска: задачи не могут запускаться чаще 15 минут.
Обработка событий
Для каждой фоновой задачи существует возможность задать в desktop-файле обрабатываемое событие. Если соответствующее событие не указано в desktop-файле, то фоновая задача не будет создана.
Фоновые задачи могут обрабатывать следующие события:
- обработка push-сообщений;
- системные события.
Взаимодействие с приложениями
Фоновые задачи взаимодействуют с другими приложениями различными способами, что позволяет эффективно выполнять фоновые операции, ускоряя работу приложения.
Методы IPC
Существуют средства IPC для взаимодействия других процессов приложения и фоновых задач:
- общая файловая система;
- разделяемая память;
- обмен сообщениями;
- синхронизация.
- API для взаимодействия.
Схемы URI
URI-схемы для взаимодействия фоновой задачи с приложением в ОС Аврора позволяют установить связь между приложением и фоновым процессом, чтобы обеспечивать взаимодействие и обмен данными между ними. Нет никаких ограничений на то, какие URI могут быть отправлены в уведомлении, при условии, что их размер не превышает 2048 байт. URI будет перенаправлен целевому приложению без каких-либо изменений.
Приложения, желающие обрабатывать уведомления, с другой стороны,
могут зарегистрироваться в качестве обработчиков только для схем URI,
начинающиеся с aurora-<org_name>.
.
Это позволяет приложениям определять свою собственную схему,
гарантируя при этом отсутствие конфликтов с другими приложениями.