是否有可能让Tizen应用程序保持不动

tym*_*ark 10 tizen tizen-web-app tizen-wearable-sdk tizen-studio

最近我开始为Tizen OS开发.我的应用程序仅针对可穿戴设备创建,仅适用于Samsung Gear Sport(Tizen 3.0 on board)的特定设备.该应用程序的主要目的是在很长一段时间内收集完整的传感器数据.我对心率和运动传感器(陀螺仪和加速度计)感兴趣.然后,这些数据将被发送到云服务器并进行分析.目前我正在考虑一个WEB应用程序,因为到目前为止我没有发现WEB API缺少本机API中存在的东西的证据.

但是Tizen OS有一个限制,到目前为止我无法克服.我的应用程序在一段时间后(大约10分钟左右)进入睡眠状态.这个应用程序应该在后台工作很长时间(最多10个小时)至关重要.为实现这一目标,我尝试了以下方法:

  • 具有背景类别的普通Tizen应用程序:此方法提供的数据仍然过于分散,例如我有15分钟的漏洞,根本没有记录任何数据.有时甚至超过30分钟的洞.
  • Tizen警报API:警报在保持应用程序活动的情况下完成了工作,但是对于每个警报,应用程序都被带到了前面,这不是一个可接受的解决方案.有一个选项可以静默唤醒应用程序(使用app控件),但它没有任何回调,因此所有警报都必须预先安排.
  • CPU_AWAKE标志使系统显示"此应用程序正在使用太多能量"弹出窗口,并且在10分钟左右未得到答复时,系统将终止我的应用程序.
  • 网络工作者 - 这只是为了争论,网络工作者与应用程序一起入睡
  • 数据记录:我希望得到类似Apple Health Kit的东西,但我得到的东西根本不适用于HRM.不知何故,它适用于PRESSURE传感器.Tizen允许开始录制HRM但是在 - 之后没有录制NotFoundError: Failed to read recorded data.任何其他传感器给出TypeMismatchError.
  • Web服务应用程序 - 这需要与三星合作伙伴级别的认证,也受到背景限制的影响,正如文档所提到的那样.
  • Watch Face方法在设备设置中将"keep always on"标志设置为true.这个解决方案是我尝试过的最好的解决方案.Watch face应用程序每分钟唤醒一次以更改时间,它还会接收传感器数据.不幸的是,经过更多的测试后发现,记录的数据中存在几个漏洞.

关于电池:以上都没有将电池耗尽到不可接受的程度.首先,我想找到一个解决方案,它能够为我提供所需的所有传感器数据,并且至少需要10个小时,并且没有任何漏洞.之后,如果事实证明这个解决方案耗尽了太多电池,我会考虑如何优化它.

而现在的问题:是否有可能让我的应用程序保持10个多小时不停?

小智 6

如果您以本机 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);
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在 Manifest 中设置背景类别(传感器 + 位置,如果需要),否则 Tizen 将在大约 10 分钟后杀死您的应用程序。

当然,几乎所有这些都没有被正确记录......


tym*_*ark 6

我花了好几个星期试图找到这个问题的解决方案。我最接近有史以来不间断工作的应用程序是创建多包应用程序(也称为混合应用程序),其中包括:

  • 用 JS 编写的 WEB 应用程序,它是一个表盘应用程序
  • 用 C 编写的本机服务应用程序(无 UI)

所有应用程序都针对 Tizen API 2.3.1。这是至关重要的部分,因为 3.0 API 存在多个问题,例如操作系统意外终止应用程序或“电池使用量过多”提示,有时也会导致我的应用程序终止。Tizen OS 的有趣之处在于,当它由于过多的资源使用而杀死表盘应用程序时,手表的主屏幕只是纯黑色。不幸的是,针对 API 2.3.1 导致无法使用此版本之后添加的多个 API。

我使用的下一件事是device_power_request_lock(POWER_LOCK_CPU, 0);在所有本机服务应用程序中。我相信使用较旧的 API(2.3.1 而不是 3.0)可以让应用程序运行更长的时间而不会被系统杀死。我认为这是我利用的这个 Tizen OS 版本中的一个缺陷。

在 WEB 应用程序中,我使用了ScreenStateChangeListenertimetick 事件来检查服务应用程序是否正在运行。如果不是 -> 它是由 WEB 应用程序启动的。对于服务和表盘之间的通信,我使用了首选项侦听器 API。Watch face WEB app 负责检查哪些服务正在运行,哪些服务需要被唤醒或启动。

最后,我最终使用了 4 个与 WEB 应用程序打包在一起的本机服务应用程序。每个服务应用程序都有自己的用途,如文件系统、网络、监控等。多线程服务应用程序真的很难维护,并且经常因未知原因崩溃。