Как обеспечить стабильную работу мобильного приложения 1С в фоновом режиме и своевременное получение Push-уведомлений?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка мобильных приложений на платформе 1С часто сталкивается с серьезным вызовом: необходимостью поддерживать постоянную связь с сервером для оперативного получения данных (заказов, уведомлений, событий). По умолчанию операционные системы, особенно Android, стремятся минимизировать фоновую активность приложений для экономии заряда батареи. В этой статье мы подробно разберем, почему мобильное приложение 1С может "засыпать", и как настроить систему и код так, чтобы оно работало максимально стабильно в режиме сервиса.

Разберем причины: Почему Android "убивает" мобильную платформу 1С?

Для начала проанализируем ситуацию с точки зрения операционной системы. Android использует механизм под названием OOM Killer (Out Of Memory Killer), который завершает процессы при нехватке оперативной памяти. Каждому приложению назначается коэффициент oom_adj_score. Чем выше этот показатель, тем выше вероятность, что система закроет приложение при первой необходимости.

Рассмотрим факторы, влияющие на этот приоритет:

  1. Объем занимаемой памяти: Приложения на мобильной платформе 1С достаточно "тяжелые" (часто занимают 150-200 Мб и более). Для Android это сигнал, что при нехватке ресурсов такая "жертва" освободит много места.
  2. Состояние процесса: Если приложение свернуто и на экране нет активного уведомления, связанного с ним, система считает его фоновым и снижает его приоритет.
  3. Режим Doze Mode: Начиная с Android 6.0, если устройство неподвижно и экран выключен, система переходит в режим глубокого сна, отключая сетевой доступ для всех приложений, кроме исключений.

Шаг 1. Настройка операционной системы на мобильном устройстве

Прежде чем переходить к программированию, необходимо убедиться, что настройки ОС позволяют приложению работать в фоне. Рассмотрим подробнее, что нужно сделать на устройствах популярных производителей (особенно Xiaomi, Huawei, Samsung):

1. Отключение контроля активности (Экономия энергии). Нужно зайти в "Настройки" — "Приложения" — "1С:Мобильное приложение" — "Питание" (или "Аккумулятор") и установить режим "Не ограничивать". Это позволит приложению игнорировать стандартные лимиты Doze Mode.

2. Блокировка в списке запущенных. Откройте панель недавно запущенных приложений. Найдите 1С и потяните карточку приложения вниз (или удерживайте ее), пока не появится значок "Замок". Это защитит приложение от случайного закрытия при очистке оперативной памяти вручную.

3. Разрешение автозапуска. В смартфонах китайских производителей (Xiaomi, Huawei, Oppo) существует отдельный пункт "Автозапуск". Если его не включить, приложение не сможет запуститься самостоятельно после перезагрузки телефона или при получении Push-уведомления.

Шаг 2. Использование штатных фоновых заданий в 1С

Начиная с версии мобильной платформы 8.3.18, разработчики 1С предоставили штатный механизм фоновых заданий. В отличие от простых обработчиков ожидания, которые работают только в открытой форме, ФоновыеЗадания могут исполняться, когда приложение свернуто.

Проанализируем пример настройки фонового задания для синхронизации данных:


// В модуле управляемого приложения
Процедура ПриНачалеРаботыСистемы()
    НастройкаФоновогоЗадания();
КонецПроцедуры

Процедура НастройкаФоновогоЗадания()
    ПараметрыЗадания = Новый Структура("Интервал", 300); // 5 минут
    МобильныеУстройства.УстановитьОбновлениеДанныхВФоне(Истина, ПараметрыЗадания);
КонецПроцедуры

Использование метода УстановитьОбновлениеДанныхВФоне сообщает мобильной платформе, что необходимо периодически просыпаться для выполнения кода. Однако помните, что частота выполнения все равно будет корректироваться операционной системой исходя из App Standby Buckets (категорий активности приложений).

Шаг 3. Оптимизация Push-уведомлений для режима сна

Выясним причину, по которой Push-уведомления приходят только в момент включения экрана. Чаще всего это связано с низким приоритетом сообщения в Firebase Cloud Messaging (FCM).

Для того чтобы устройство "проснулось" для обработки уведомления, необходимо использовать High Priority. Рассмотрим структуру сообщения, которую должен отправлять сервер:


{
  "message": {
    "token": "device_token",
    "android": {
      "priority": "high"
    },
    "notification": {
      "title": "Новый заказ!",
      "body": "Поступил новый заказ №123"
    }
  }
}

При использовании High Priority службы Google Play Services получают право доставить уведомление немедленно, даже если устройство находится в режиме глубокого сна. Если вы используете встроенные средства 1С для отправки пушей, убедитесь, что в параметрах уведомления указана максимальная важность.

Шаг 4. Создание Foreground Service (Передний план)

Самый надежный способ предотвратить закрытие приложения — запуск его как "Foreground Service". В этом режиме пользователь видит неудаляемое уведомление в строке состояния, а ОС понимает, что приложение выполняет важную работу.

В мобильной платформе 1С это можно косвенно реализовать через использование механизмов Геопозиционирования в фоновом режиме. Когда приложение запрашивает координаты в фоне, платформа вынуждена поддерживать процесс активным. Для этого используется метод СредстваГеопозиционирования.НачатьОбновлениеСоставаОтображаемыхДанных() с соответствующими настройками фонового режима.

Шаг 5. Расширенные возможности через внешние компоненты

Если штатных средств платформы недостаточно (например, требуется работа со специфическими системными событиями Android), рассмотрим вариант написания внешней компоненты на Android Native SDK. Это позволит реализовать:

  1. WakeLock: Программное удержание процессора от засыпания (требует осторожности, так как быстро расходует батарею).
  2. SyncAdapter (Аккаунт системы): Создание системного аккаунта 1С. Приложения, имеющие свой аккаунт в разделе "Учетные записи", получают от Android наивысший приоритет в очереди на синхронизацию данных.
  3. BroadcastReceiver: Слушатель системных событий, который может "подталкивать" основное приложение 1С к работе, например, при подключении зарядного устройства или смене состояния сети.

Итоги и рекомендации

Подведем итог: универсальной "волшебной кнопки" в 1С для работы в фоне не существует, так как это ограничение безопасности и энергосбережения самой ОС Android. Однако, комбинируя следующие методы, мы можем добиться стабильности:

Разработка для мобильных устройств требует понимания жизненного цикла мобильной ОС. Совмещая грамотную настройку серверной части (Push) и клиентской части (настройки разрешений), вы обеспечите надежную работу вашего мобильного решения 1С в режиме 24/7.

← На главную