Поток сердечного ритма в фоновом режиме на неопределенный срок?

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

Когда приложение находится на переднем плане, я передаю информацию о частоте сердечных сокращений и сохраняю их в сторонней базе данных. Это легкая часть.

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

Это все еще усложняется, потому что частота сердечных сокращений составляет один раз в секунду, поэтому могут быть десятки тысяч, прежде чем приложение вернется. Я думаю, вместо того, чтобы добавлять их в текстовый файл, просто создавать имена файлов, которые указывают номер частоты сердечных сокращений, и получать данные из имен файлов и даты создания. Таким образом, мне никогда не придется открывать файл. Мне просто нужно прочитать его метаданные и удалить файл при чтении в базу данных.

Такая, казалось бы, простая задача становится еще сложнее. Я должен иметь дело с Core Bluetooth и следить за тем, чтобы он поддерживал соединение открытым, но я не могу представить, что iOS позволит приложению бесконечно прослушивать датчик сердечного ритма. В какой-то момент приложение завершит работу, но что произойдет с потоком пульса?

Есть ли проверенный способ обработки потоковой передачи пульса в фоновом режиме на неопределенный срок? Любой совет или опыт будет принят с благодарностью!


person TruMan1    schedule 03.07.2016    source источник
comment
Создание десятков тысяч файлов только для имени файла кажется плохой идеей.   -  person zaph    schedule 03.07.2016
comment
Подумайте о том, чтобы связаться с Apple. Есть форумы и евангелисты, чтобы помочь.   -  person zaph    schedule 03.07.2016


Ответы (1)


Bluetooth

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

Эта поддержка важна для некоторых типов аксессуаров, которые передают данные через регулярные промежутки времени, таких как мониторы сердечного ритма. Вы включаете поддержку связи с внешними аксессуарами в разделе «Фоновые режимы» на вкладке «Возможности» в вашем проекте Xcode. Когда вы включаете этот режим, внешняя структура аксессуаров не закрывает активные сеансы с аксессуарами.

См. раздел Фоновое выполнение в iOS руководство по программированию.

Регистрация данных

Хранение записей журнала в виде отдельных файловых узлов может привести к снижению производительности. В идеале вы должны иметь возможность писать в базу данных, пока приложение работает в фоновом режиме.

Другой вариант — добавить образцы в текстовый файл, затем прочитать файл построчно и импортировать его в базу данных. Использование одного файла для ведения журнала более эффективно, чем использование многих тысяч отдельных файлов. Если вас беспокоит размер файла, простой способ разделить файл — использовать текущую дату и время в качестве имени файла. Например: формат «год-месяц-день-час-минуты» будет создавать новый файл для каждой минуты, и каждый файл будет уникальным.

Если в файл записываются несколько процессов (например, если файл находится в общем контейнере приложения), вы можете использовать NSFileCoordinator, чтобы предотвратить условия гонки и обеспечить целостность файла.

Если вы используете защиту диска, вам может потребоваться изменить режим защиты файла журнала (или базы данных), чтобы обеспечить возможность записи в него. Установите режим защиты файла «нет» с помощью NSFileManager.defaultManager().setAttributes(:ofItemAtPath).

См. Стратегии конфиденциальности руководства по программированию для iOS.

person Luke Van In    schedule 03.07.2016
comment
Я проверил это, и частота сердечных сокращений в течение 3 часов транслировалась в NSUserDefaults, а затем умерла :( - person TruMan1; 04.07.2016
comment
Фоновый режим — это де-факто способ реализовать это в iOS. 3 часов должно быть достаточно, чтобы доказать, что iOS не намеренно убивает ваше приложение. Если iOS убьет ваше приложение, то это произойдет максимум через 10 минут. Сбой, скорее всего, вызван другими причинами, такими как ошибка в вашем приложении или даже во фреймворке iOS. Одна вещь, которая выделяется, — это большое количество отдельных событий, из-за которых ваше приложение может исчерпать ресурсы (память, дескрипторы файлов, место на диске). Посмотрите, можете ли вы вызвать сбой во время выполнения, или посмотрите, какие отчеты о сбоях могут вас просветить. - person Luke Van In; 04.07.2016
comment
@TruMan1 Что ты имеешь в виду под умершим? приложение? регистрация? соединение BLE? то, что вы пытаетесь выполнить, определенно выполнимо, если вы правильно реализуете вещи. - person Mostafa Berg; 10.08.2017