Как сохранить данные мобильного приложения 1С при переходе в фоновый режим?

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

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

Выясним причину: почему Android «убивает» мобильную платформу 1С?

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

Мобильная платформа 1С является достаточно ресурсоемкой «оболочкой». В отличие от легких нативных мессенджеров, 1С несет с собой базу данных, интерпретатор кода и графическую подсистему. Именно поэтому при нехватке RAM система выбирает 1С в качестве «жертвы» для очистки памяти. Разберем по шагам, как с этим бороться.

Решение 1: Использование событий жизненного цикла для сохранения состояния

Первое и самое правильное решение с точки зрения архитектуры — это использование обработчиков событий, которые предоставляет мобильная платформа. Мы не можем запретить системе закрыть приложение, но мы можем успеть сохранить данные до того, как это произойдет. Рассмотрим основные механизмы:

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

Рассмотрим пример реализации логики сохранения:


Процедура ПриПриостановке()
    // В этот момент приложение еще активно, но уходит в фон.
    // Нужно сохранить данные из временных переменных в постоянное хранилище.
    СохранитьТекущиеДанныеФорм();
КонецПроцедуры

Важно понимать, что использование стандартного события ПриЗавершенииРаботыСистемы может быть неэффективным, так как при жестком «убийстве» процесса операционной системой это событие просто не успевает отработать. Поэтому фокус должен быть именно на ПриПриостановке.

Решение 2: Стратегия «Принудительной записи» данных

Проанализируем типичную ошибку разработки: хранение введенных данных в реквизитах формы до тех пор, пока пользователь не нажмет кнопку «ОК» или «Записать». В мобильном приложении такой подход недопустим. Разберем правильный алгоритм:

  1. Запись после изменения: Настраивайте обработчики событий ПриИзменении для ключевых полей ввода. Как только пользователь заполнил важное поле, данные должны быть сразу отправлены в базу данных или во временное хранилище.
  2. Использование хранилища настроек: Если данные не являются объектами базы данных (например, промежуточные расчеты), используйте ХранилищеОбщихНастроек.
  3. Локальные файлы: Для очень больших объемов временных данных можно рассмотреть запись в локальный JSON-файл в защищенную область памяти устройства.

Пример кода для быстрого сохранения состояния через настройки:


Процедура СохранитьСостояниеПользователя(ЗначениеПоля) Экспорт
    ХранилищеОбщихНастроек.Сохранить("МобильноеРабочееМесто", "ТекущийЧерновик", ЗначениеПоля);
КонецПроцедуры

Решение 3: Выбор стабильной версии мобильной платформы

Как показывает практика практикующих разработчиков, стабильность работы в фоне сильно зависит от версии сборки мобильной платформы. В ходе обсуждения было выяснено, что версия 8.3.15.62 показывает хорошие результаты на различных устройствах. Однако для современных устройств рекомендуется использовать версии не ниже 8.3.18, так как в них существенно переработаны механизмы фоновых заданий.

Важный нюанс: Если ваше приложение собрано как 32-битное, оно может иметь жесткие ограничения по использованию памяти на 64-битных системах. Попробуем пересобрать приложение, используя 64-битную архитектуру (arm64-v8a), это часто решает проблему внезапных «вылетов» из-за переполнения адресного пространства.

Решение 4: Настройка параметров энергосбережения на устройстве

Иногда проблема кроется не в коде 1С, а в настройках агрессивного энергосбережения производителей смартфонов (Xiaomi, Huawei, Samsung). Выясним, какие настройки нужно изменить на стороне пользователя:

  1. Исключения экономии заряда: Необходимо зайти в настройки батареи и добавить приложение 1С в список «Не экономить заряд». Это предотвратит принудительную остановку процесса через 20-30 секунд простоя.
  2. Автозапуск: Разрешите приложению автоматический запуск в фоновом режиме.
  3. Закрепление в меню многозадачности: Посоветуйте пользователям открыть список запущенных приложений и нажать на иконку «замочка» над окном 1С. Это даст системе прямой сигнал: «Не закрывай это приложение ни при каких обстоятельствах».

Решение 5: Использование Push-уведомлений для «пробуждения»

Если специфика вашей работы предполагает, что приложение должно не просто хранить данные, но и выполнять фоновые операции (например, GPS-трекинг или ожидание заказов), рассмотрим использование Push-уведомлений. При получении уведомления через сервис Firebase, ОС Android на короткое время повышает приоритет процесса 1С, позволяя ему выполнить необходимые действия и обновить свое состояние в памяти, что значительно снижает риск завершения процесса.

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

← На главную