Можно ли поддерживать работу приложения Tizen без остановки?

Недавно я начал разрабатывать под 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 часов без перерыва?


person tymbark    schedule 10.04.2018    source источник
comment
Вы можете проверить разработчика .tizen.org / форумы / разработка-веб-приложений /   -  person Iqbal hossain    schedule 13.04.2018
comment
Собственно это мой пост на форуме разработчиков tizen. Все еще ищу лучшее решение, чем сигнализация.   -  person tymbark    schedule 13.04.2018
comment
Насколько мне известно, в настоящее время может быть нет лучшего решения, чем это .... если вы найдете, пожалуйста, поделитесь   -  person Iqbal hossain    schedule 13.04.2018
comment
Я тоже застрял в этом вопросе. У меня есть собственное приложение Tizen, написанное на C. Я использую опцию set для постоянного включения как для акселерометра, так и для HRM, и мне нужно получать данные примерно за 6-8 часов подряд. У меня большие дыры иногда на 30 минут, а иногда до 3-4 часов. Также установка запроса блокировки ЦП не будет работать. Если я продолжу отправлять сообщения между приложением и носимым устройством с помощью SAP, останется ли оно в живых?   -  person Gilad Eshkoli    schedule 14.04.2018
comment
Привет, я думаю, что нашел решение (по крайней мере, для меня, когда я использую собственные приложения Tizen UI). Tizen предлагает приложения Services без пользовательского интерфейса для выполнения фоновых задач, а также возможность перезагрузки, если ОС удалось его убить. developer.tizen. org / ko / development / guides / native-application /   -  person Gilad Eshkoli    schedule 15.04.2018
comment
Нет, вы правы, даже когда я использую служебное приложение, есть серьезные дыры на 30 минут и более. Удачи с чем-нибудь еще?   -  person Gilad Eshkoli    schedule 15.04.2018
comment
Привет, в настоящее время я разрабатываю циферблат с будильниками, которые планируют себя по событию timetick (в режиме окружающей среды). Также включена опция всегда включен циферблат.   -  person tymbark    schedule 16.04.2018
comment
Что ж, циферблат с Always On для меня не вариант.   -  person Gilad Eshkoli    schedule 17.04.2018
comment
Как насчет того, чтобы связаться с школой приложений Tizen? Это сайт, созданный Tizen разработчиков для других разработчиков. Если вы оставите комментарий к этому вопросу, они могут подготовить лекцию или решение этого вопроса.   -  person msalt.net    schedule 17.04.2018
comment
@msalt Я отправил им сообщение, спасибо за предложение   -  person tymbark    schedule 17.04.2018
comment
Извините за использование Sidetopic, не могли бы вы рассказать, как вы разбудили приложение Tizen в автоматическом режиме с помощью appControl?   -  person Armaan-Ul-Islam    schedule 17.04.2018
comment
просто используйте http://tizen.org/appcontrol/operation/main в appControl вместо .../default   -  person tymbark    schedule 17.04.2018
comment
Привет, @tymbark, я наконец сделал приложение Service для подключений датчиков и получения данных при использовании приложения пользовательского интерфейса только для отображения статуса, а с запросом CPU_AWAKE, наконец, все в порядке! Другое дело, что расход батареи вроде как 30-35% при использовании 7-8 часов подряд.   -  person Gilad Eshkoli    schedule 25.04.2018
comment
Один вопрос, пожалуйста, если вы знаете или знаете какой-либо обходной путь, через 7-8 часов кажется, что SAP отключен / заморожен, и я не могу подключиться к нему с телефона Android, ТОЛЬКО после открытия приложения Gear и использования findPeers () на Android он наконец установит действительное соединение с помощью SAP. Есть ли способ сохранить эту связь навсегда? Мой потребитель - Android, а поставщик - приложение Gear.   -  person Gilad Eshkoli    schedule 25.04.2018
comment
@Gil У меня такая же проблема с убитым приложением через некоторое время. Но почему ОС Tizen не жалуется на использование батареи с CPU_AWAKE? В моей ситуации, если я не освобождаю ЦП в течение 10 минут, система показывает, что это приложение потребляет слишком много энергии, и убивает мое приложение. В настоящее время я пытаюсь сделать это так: запросить процессор на 1 минуту, затем отпустить на 1 минуту, затем запросить еще раз ...   -  person tymbark    schedule 26.04.2018
comment
@tymbark Может быть, потому что я использую приложение-службу, а не обычное приложение пользовательского интерфейса, которое предназначено для работы в фоновом режиме. Я точно не знаю. Документация по Tizen - это ад.   -  person Gilad Eshkoli    schedule 26.04.2018
comment
@Gil у вас есть сертификат партнерского уровня от samsung? Вы также делаете веб-приложение или собственное приложение?   -  person tymbark    schedule 26.04.2018
comment
@tymbark Нет. Сертификат партнерского уровня отсутствует. Строю родной (С). Он еще не был опубликован, но из Tizen Studio все выглядит неплохо.   -  person Gilad Eshkoli    schedule 26.04.2018
comment
@Gil спасибо за информацию. Я предполагаю, что нативная служба не требует сертификата партнерского уровня. Вы можете сказать мне, насколько хорошо ваше решение? Он работает все время без перерыва, считывая 1 час в секунду в течение многих часов?   -  person tymbark    schedule 26.04.2018
comment
Да, я получаю ACC 10 раз в секунду и HRM 1 образец в минуту. Обратите внимание, что HRM убивает батарею (зеленый свет)   -  person Gilad Eshkoli    schedule 26.04.2018
comment
@Gil да, по моим наблюдениям на 8ч записи уходит до 50% батареи   -  person tymbark    schedule 26.04.2018
comment
@tymbark, ты прав! Видел и это, при выборке только один раз в минуту она снижается до 25-30% макс.   -  person Gilad Eshkoli    schedule 26.04.2018
comment
@tymbark, В любом случае хотел бы помочь. Если у вас есть способ сохранить соединение SAP, я буду более чем счастлив!   -  person Gilad Eshkoli    schedule 26.04.2018
comment
@Gil, извини, я никогда не работал с этим. Мое приложение отправляет данные прямо в облако с помощью REST api. Если хотите, вы можете разработать свое решение для непрерывной работы приложения в качестве ответа на этот вопрос.   -  person tymbark    schedule 26.04.2018
comment
@Gil Привет, используя твои подсказки, мне удалось создать сервисное приложение на нативном Tizen, которое работает долгое время, но только для версии Tizen 2.3.1. Если я сделаю целевой Tizen 3.0, служба остановится примерно через 10 секунд. А как насчет вашего решения? На какую версию Tizen вы нацеливаетесь?   -  person tymbark    schedule 21.05.2018
comment
Я targetimg 2.3.1, но он хорошо работает на 3.0 (Gear 3) и выше   -  person Gilad Eshkoli    schedule 21.05.2018
comment
То же самое и со мной. Интересным фактом является то, что если я обновляю целевую версию до 3.0, сервисное приложение немедленно останавливается через 10 секунд.   -  person tymbark    schedule 21.05.2018
comment
@tymbark Эй, я борюсь с той же проблемой. Каким будет ваш окончательный подход к этому вопросу?   -  person Roman Samoilenko    schedule 15.08.2018
comment
@RomanSamoylenko Привет, у нас получилось смешанное решение с циферблатом и множеством нативных сервисов, также мы нацелены на Tizen 2.3.1   -  person tymbark    schedule 21.08.2018
comment
Привет, @tymbark, не могли бы вы опубликовать свое решение здесь в качестве ответа, чтобы другие разработчики могли получить помощь отсюда?   -  person Shaswati Saha    schedule 28.08.2018


Ответы (2)


Я потратил много недель, пытаясь найти решение этой проблемы. Самое близкое к приложению , работающее постоянно без перерыва, - это создание многопакетного приложения (также называемого гибридным приложением), которое состояло из:

  • Веб-приложение, написанное на JS, которое представляло собой приложение для циферблата
  • Собственное служебное приложение (без пользовательского интерфейса), написанное на C

Все приложения были ориентированы на Tizen API 2.3.1. Это важная часть, потому что с API 3.0 было множество проблем, таких как неожиданное завершение работы приложения ОС или сообщения «слишком много заряда батареи», которые иногда также приводили к прекращению работы моего приложения. Забавная вещь в ОС Tizen заключается в том, что, когда она закрывает приложение циферблата из-за слишком большого использования ресурсов, главный экран часов становится просто черным. К сожалению, ориентация на API 2.3.1 привела к невозможности использования нескольких API, добавленных после этой версии.

Следующее, что я использовал, это device_power_request_lock(POWER_LOCK_CPU, 0); во всех собственных сервисных приложениях. Я считаю, что использование более старого API (2.3.1 вместо 3.0) позволило приложению работать намного дольше, не будучи убитым системой. Я думаю, что это недостаток этой версии Tizen OS, которую я использовал.

В веб-приложении я использовал события ScreenStateChangeListener и timetick, чтобы проверить, запущено ли приложение службы. Если нет -> это было запущено WEB-приложением. Для связи между службой и циферблатом я использовал API прослушивателя предпочтений. Приложение Watch Face WEB отвечало за проверку того, какая служба работает и какую службу нужно разбудить или запустить.

В итоге я использовал 4 собственных сервисных приложения, упакованных вместе с WEB-приложением. Каждое служебное приложение имело свое собственное назначение, например, файловую систему, сеть, мониторинг и т. Д. Многопоточные служебные приложения было очень сложно поддерживать и часто давали сбой по неизвестной причине.

person tymbark    schedule 26.09.2018
comment
Это все еще текущее состояние страны или мы тем временем получили какие-то лучшие варианты для бесконечных работающих сервисов? В настоящее время я экспериментирую с различными подходами, но пока не нашел удовлетворительного решения. - person user1195883; 30.05.2020
comment
Год не возвращался к этой теме, так как сейчас работаю в разных проектах. Но он по-прежнему должен работать с умными часами Samsung Gear Sport. Я не проверял это решение на новейших часах Samsung, но думаю, что у них нет таких хороших датчиков, как у Gear Sport. - person tymbark; 01.06.2020

Если вы нацеливаетесь на собственный Service App API 3.0, получите следующее:

device_power_request_lock(POWER_LOCK_CPU, 0);
sensor_listener_set_option(listener,  SENSOR_OPTION_ALWAYS_ON);
sensor_listener_set_attribute_int(listener, SENSOR_ATTRIBUTE_PAUSE_POLICY, SENSOR_PAUSE_NONE);

И не забудьте установить категорию фона (датчик + местоположение, если необходимо) в манифесте, потому что в противном случае Tizen убьет ваше приложение примерно через 10 минут.

Конечно, вряд ли все это должным образом задокументировано ...

person tingel    schedule 12.06.2018
comment
Я мог бы успешно использовать device_power_request_lock(POWER_LOCK_DISPLAY, 0);, чтобы оставить дисплей включенным на заданный тайм-аут, но мне пришлось добавить привилегию http://tizen.org/privilege/display, иначе это не сработает для меня - person go3d; 28.05.2020