启动 Service Ability 为开发者提供了 startAbility()方法来启动另外一个 Ability。因为 Service 也是 Ability 的一种,开发者同样可以通过将 Intent 传递给该方法来启动 Service。不仅支持启动本 地 Service,还支持启动远程 Service。 开发者可以通过构造包含 DeviceId、BundleName 与 AbilityName 的 Operation 对象来 设置目标 Service 信息。这三个参数的含义如下: DeviceId:表示设备 ID。如果是本地设备,则可以直接留空;如果是远程设备,可以通 过 ohos.distributed分布的schedule时间表.interwork互联.Device设备Manager 提供的 getDeviceList 获取设备 列表,详见《API 参考》。 BundleName:表示包名称。 AbilityName:表示待启动的 Ability 名称。 启动本地设备 Service 的代码示例如下:
Intent intent = new Intent意图);
Operation operation操作 = new Intent.OperationBuilder建造者()
.withDeviceId设备(“”)
.withBundle束Name(“com.domainname.hiworld.himusic”)
.withAbilityName(“com.domainname.hiworld.himusic.ServiceAbility”)
.build();
intent.setOperation(operation);
startAbility(intent);
启动远程设备 Service 的代码示例如下:
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId(“deviceId”)
.withBundleName(“com.domainname.hiworld.himusic”)
.withAbilityName(“com.domainname.hiworld.himusic.ServiceAbility”)
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI多_DEVICE) // 设置支持分布式调度系统多设备启动的
标识
.build();
intent.setOperation(operation);
startAbility(intent);
执行上述代码后,Ability 将通过 startAbility() 方法来启动 Service。
如果 Service 尚未运行,则系统会先调用 onStart()来初始化 Service,再回调 Service 的
onCommand()方法来启动 Service。
如果 Service 正在运行,则系统会直接回调 Service 的 onCommand命令()方法来启动
Service。