Разработка мобильных приложений на платформе 1С часто сталкивается с серьезным вызовом: необходимостью поддерживать постоянную связь с сервером для оперативного получения данных (заказов, уведомлений, событий). По умолчанию операционные системы, особенно Android, стремятся минимизировать фоновую активность приложений для экономии заряда батареи. В этой статье мы подробно разберем, почему мобильное приложение 1С может "засыпать", и как настроить систему и код так, чтобы оно работало максимально стабильно в режиме сервиса.
Для начала проанализируем ситуацию с точки зрения операционной системы. Android использует механизм под названием OOM Killer (Out Of Memory Killer), который завершает процессы при нехватке оперативной памяти. Каждому приложению назначается коэффициент oom_adj_score. Чем выше этот показатель, тем выше вероятность, что система закроет приложение при первой необходимости.
Рассмотрим факторы, влияющие на этот приоритет:
Прежде чем переходить к программированию, необходимо убедиться, что настройки ОС позволяют приложению работать в фоне. Рассмотрим подробнее, что нужно сделать на устройствах популярных производителей (особенно Xiaomi, Huawei, Samsung):
1. Отключение контроля активности (Экономия энергии). Нужно зайти в "Настройки" — "Приложения" — "1С:Мобильное приложение" — "Питание" (или "Аккумулятор") и установить режим "Не ограничивать". Это позволит приложению игнорировать стандартные лимиты Doze Mode.
2. Блокировка в списке запущенных. Откройте панель недавно запущенных приложений. Найдите 1С и потяните карточку приложения вниз (или удерживайте ее), пока не появится значок "Замок". Это защитит приложение от случайного закрытия при очистке оперативной памяти вручную.
3. Разрешение автозапуска. В смартфонах китайских производителей (Xiaomi, Huawei, Oppo) существует отдельный пункт "Автозапуск". Если его не включить, приложение не сможет запуститься самостоятельно после перезагрузки телефона или при получении Push-уведомления.
Начиная с версии мобильной платформы 8.3.18, разработчики 1С предоставили штатный механизм фоновых заданий. В отличие от простых обработчиков ожидания, которые работают только в открытой форме, ФоновыеЗадания могут исполняться, когда приложение свернуто.
Проанализируем пример настройки фонового задания для синхронизации данных:
// В модуле управляемого приложения
Процедура ПриНачалеРаботыСистемы()
НастройкаФоновогоЗадания();
КонецПроцедуры
Процедура НастройкаФоновогоЗадания()
ПараметрыЗадания = Новый Структура("Интервал", 300); // 5 минут
МобильныеУстройства.УстановитьОбновлениеДанныхВФоне(Истина, ПараметрыЗадания);
КонецПроцедуры
Использование метода УстановитьОбновлениеДанныхВФоне сообщает мобильной платформе, что необходимо периодически просыпаться для выполнения кода. Однако помните, что частота выполнения все равно будет корректироваться операционной системой исходя из App Standby Buckets (категорий активности приложений).
Выясним причину, по которой Push-уведомления приходят только в момент включения экрана. Чаще всего это связано с низким приоритетом сообщения в Firebase Cloud Messaging (FCM).
Для того чтобы устройство "проснулось" для обработки уведомления, необходимо использовать High Priority. Рассмотрим структуру сообщения, которую должен отправлять сервер:
{
"message": {
"token": "device_token",
"android": {
"priority": "high"
},
"notification": {
"title": "Новый заказ!",
"body": "Поступил новый заказ №123"
}
}
}
При использовании High Priority службы Google Play Services получают право доставить уведомление немедленно, даже если устройство находится в режиме глубокого сна. Если вы используете встроенные средства 1С для отправки пушей, убедитесь, что в параметрах уведомления указана максимальная важность.
Самый надежный способ предотвратить закрытие приложения — запуск его как "Foreground Service". В этом режиме пользователь видит неудаляемое уведомление в строке состояния, а ОС понимает, что приложение выполняет важную работу.
В мобильной платформе 1С это можно косвенно реализовать через использование механизмов Геопозиционирования в фоновом режиме. Когда приложение запрашивает координаты в фоне, платформа вынуждена поддерживать процесс активным. Для этого используется метод СредстваГеопозиционирования.НачатьОбновлениеСоставаОтображаемыхДанных() с соответствующими настройками фонового режима.
Если штатных средств платформы недостаточно (например, требуется работа со специфическими системными событиями Android), рассмотрим вариант написания внешней компоненты на Android Native SDK. Это позволит реализовать:
Подведем итог: универсальной "волшебной кнопки" в 1С для работы в фоне не существует, так как это ограничение безопасности и энергосбережения самой ОС Android. Однако, комбинируя следующие методы, мы можем добиться стабильности:
РазделениеКонфигурации для облегчения мобильного клиента).Разработка для мобильных устройств требует понимания жизненного цикла мобильной ОС. Совмещая грамотную настройку серверной части (Push) и клиентской части (настройки разрешений), вы обеспечите надежную работу вашего мобильного решения 1С в режиме 24/7.