设备应用服务
介绍
在 Zepp OS v3 版本之前,用户在手表退出小程序「设备应用」 页面,整个小程序被销毁,失去调用 Zepp OS 开放能力的机会。
我们在 Zepp OS v3 中推出了重磅功能「设备应用服务」。
「设备应用服务」以无 UI 的方式运行,在用户退出小程序页面后,仍然可以运行。
受系统资源约束和无 UI 特性影响,「设备应用服务」在 API 调用方面存在部分限制,会在后文 限制 中详细说明。
「设备应用服务」从使用方式上来说分为两种,分为「单次执行」和「持续运行」。
1. 单次执行
使用以下方式唤起「设备应用服务」,「设备应用服务」的运行遵循「单次执行」的策略。
- @zos/alarm 定时器 API
@zos/notification
系统通知 API- 系统事件
「单次执行」即在相关代码执行完成后,立即退出「设备应用服务」。
「单次执行」对系统资源消耗较少,是更为推荐的使用方式
2. 持续运行
在「设备应用」中通过 @zos/app-service start API
方法可以启动「设备应用服务」,做到服务持续运行。
使用 @zos/app-service start API
启动「设备应用服务」之后,退出「设备应用」UI 界面,「设备应用服务」仍然保持运行。如果在「设备应用服务」运行途中进行设备重启操作,「设备应用服务」会跟随系统重新启动,并保持运行状态。
只有当主动调用退出服务 API,或触发了系统相关限制后,「设备应用服务」才会退出。
使用「设备应用服务」
配置「设备应用服务」
在 小程序配置 app.json 中的 module 进行配置,一个小程序可以配 置多个「设备应用服务」。
{
"module": {
"app-service": {
"services": ["app-service/demo_service"]
}
}
}
如果需要持续运行「设备应用服务」,需要调用 @zos/app-service
模块下的方法如 start
,这些方法依赖 device:os.bg_service
权限,还需在 permissions
字段中配置权限信息。
{
"permissions": ["device:os.bg_service"],
"module": {
"app-service": {
"services": ["app-service/demo_service"]
}
}
}
注册「设备应用服务」
使用 AppService
构造函数注册「设备应用服务」。
看一个代码示例,「设备应用服务」中使用 Time
传感器每分钟打印一次当前时间。
import { Time } from '@zos/sensor'
const timeSensor = new Time();
AppService({
onInit(e) {
logger.log(`service onInit(${e})`);
timeSensor.onPerMinute(() => {
logger.log(
`${moduleName} time report: ${timeSensor.getHours()}:${timeSensor.getMinutes()}:${timeSensor.getSeconds()}`
);
});
},
onDestroy() {
logger.log("service on destroy invoke");
},
});
「设备应用服务」执行策略
唤起单次执行的「设备应用服务」
目前有以下方式可以唤起单次执行的「设备应用服务」
- @zos/alarm 定时器 API
@zos/notification
系统通知 API- 系统事件