Недавно я начал разрабатывать под Tizen OS. Мое приложение создано только для носимых устройств и только для конкретного устройства - Samsung Gear Sport (на борту есть Tizen 3.0). Основная цель этого приложения - собрать полные данные датчиков за длительный период времени. Меня интересует частота сердечных сокращений и датчики движения в целом (гироскоп и акселерометр). Затем эти данные будут отправлены на облачный сервер и проанализированы. В настоящее время я рассматриваю веб-приложение, потому что до сих пор я не нашел доказательств того, что в WEB API не хватает чего-то, что существует в собственном API.
Но в Tizen OS есть одно ограничение, которое я пока не могу преодолеть. Мое приложение переводится в спящий режим через некоторое время (около 10 минут). Очень важно, чтобы это приложение работало в фоновом режиме долгое время (до 10 часов). Для этого я попробовал следующие подходы:
- Нормальное приложение Tizen с фоновой категорией: данные, полученные с помощью этого подхода, все еще слишком фрагментированы, например, у меня есть 15-минутные дыры, в которые вообще не было записано никаких данных. Иногда были дыры даже дольше 30 минут.
- Tizen alarms API: сигналы тревоги помогали поддерживать работу приложения, но с каждым сигналом приложение выводилось на передний план, и это неприемлемое решение. Существует возможность бесшумно разбудить приложение (с помощью управления приложением), но у него нет обратного вызова, поэтому все будильники должны быть запланированы заранее.
- Флаг CPU_AWAKE заставлял систему показывать всплывающее окно «это приложение использует слишком много энергии», и если не было ответа в течение 10 минут или около того, система, тем не менее, убивала мое приложение.
- Веб-воркеры - это просто аргумент, веб-воркеры усыпляются вместе с приложением.
- Запись данных: я надеялся на что-то похожее на Apple Health Kit, но вместо этого я получил то, что вообще не работает для HRM. Как-то работает
PRESSURE
датчик. Tizen позволяет начать запись дляHRM
, но после -NotFoundError: Failed to read recorded data
ничего не записывается. Любой другой датчик даетTypeMismatchError
. - Приложение веб-службы - для этого требуется сертификация на уровне партнера с Samsung, также на него действуют фоновые ограничения, , как упоминается в документации.
- Подход Watch Face с флагом «держать всегда включенным», установленным в значение true в настройках устройства. Это лучшее решение, которое я пробовал. Приложение Watch Face просыпается каждую минуту, чтобы изменить время, а также получает данные датчика. К сожалению, после дополнительных испытаний выяснилось, что в записанных данных было несколько пробелов.
По поводу батареи: ничто из вышеперечисленного не разряжало батарею до такой степени, что это становилось неприемлемым. Итак, сначала я хотел бы найти решение, которое будет предоставлять мне все данные с датчиков, которые мне нужны, как можно чаще, по крайней мере, в течение 10 часов, без каких-либо дыр. И после этого, если окажется, что это решение слишком сильно разряжает батарею, я подумаю, как его оптимизировать.
А теперь вопрос: можно ли поддерживать работоспособность моего приложения более 10 часов без перерыва?
http://tizen.org/appcontrol/operation/main
в appControl вместо.../default
- person tymbark   schedule 17.04.2018