Излъчване на сърдечен ритъм във фонов режим за неопределено време?

Имам устройство за сърдечен ритъм, свързано с моето приложение, и се притеснявам от загуба на сърдечен ритъм при различни сценарии.

Когато приложението е на преден план, предавам поточно сърдечни честоти и ги съхранявам в база данни на трета страна. Това е лесната част.

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

Все още става по-сложно, защото сърдечните честоти са веднъж в секунда, така че може да има десетки хиляди, преди приложението да се върне. Мисля, че вместо да ги добавя към текстов файл, просто да създам имена на файлове, които показват числото на сърдечната честота и да извлека данните от имената на файловете и датата на създаване. По този начин никога не трябва да отварям файл. Просто трябва да прочета неговите метаданни и да изтрия файла, когато бъде прочетен в базата данни.

За толкова проста на пръв поглед задача става още по-сложна. Трябва да се справя с 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).

Вж. " rel="nofollow">Стратегии за поверителност в ръководството за програмиране на 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