后台服务
介绍
在 Zepp OS 3.0 系统版本之前,一旦退出 JS 小程序,则小程序被销毁,如果需要保存相关状态,则需要借助文件系统相关能力,并且无法在后台运行,做到如持续监测传感器数据这类场景。
在 Zepp OS 3.0,小程序支持后台服务的新特性,从运行时长的角度对服务进行区分,分为长服务和短服务。
长服务,在小程序页面中通过 @zos/app-service 模块中的 start 方法来启动,允许在后台常驻,并且重启后自动加载,直到使用 stop 方法停止服务。
短服务,即短时间运行的服务,如果启动后超出一定时长,会被强行关闭。类比于回调函数,由特定事件来触发,如 Zepp OS 新增的一系列模块 API,支持调用短服务。
@zos/alarm- 定时唤醒
@zos/notification- 操作系统通知,如点击通知唤起服务
app-event系统事件- 监听系统事件,抛出某一事件的时候,唤起服务
配置后台服务
需要在 小程序配置 app.json 中的 module 进行配置,此外,后台服务的运行有权限限制,需要在 permissions 中声明相关权限。
{
"permissions": [
"device:os.notification",
"device:os.bg_service",
"event:os.health.heart_rate_abnl"
],
"module": {
"app-service": {
"services": ["app-service/long_service"]
},
"app-event": {
"path": "app-event/short-service"
}
}
}
一个小程序可以配置多个 app-service,用来启动长服务,长服务需要使用 start 和 stop API 手动控制启动和停止
一个小程序只能配置一个用来监听系统事件的短服务,通过 app-event 的 path 来指定服务的路径,当我们监听的系统事件触发,系统会调用短服务,并在一定时间后关闭这个服务
注册后台服务
使用 AppService 注册后台服务
能力限制
后台服务中调用 JS 方法,不能对前台应用造成影响,只支持调用以下 API
@zos/interaction模块的showToast@zos/sensor@zos/fs@zos/ble@zos/router@zos/alarm@zos/app-service@zos/notification- 其余模块一系列
get方法
短服务系统事件
小程序需要监听的系统事件也需要配置在 app.json permissions 字段中,目前支持如下事件监听
| 系统事件 | 说明 |
|---|---|
event:os.health.heart_rate_abnl | 心率异常 |
event:os.health.spo2_low | 血氧偏低 |
event:os.weather.sun_rise | 日出 |
event:os.weather.sun_rise | 日落 |
event:os.weather.moon_rise | 月出 |
event:os.weather.moon_set | 月落 |
监听系统事件的短服务还需要在 app.json 中的 app-event 字段中进行配置
"app-service": {
"services": ["app-service/long_service"]
},
"app-event": {
"path": "app-event/short_service"
}
更多系统事件还在不断完善中,敬请期待
完整示例
我们在 Github Sample 仓库中提供了一个后台服务 demo 用于演示这个功能,请参考 os-3.0show