阅读(571) (10)

鸿蒙OS 启动Service

2020-09-16 16:31:04 更新

介绍通过startAbility()启动Service以及对应的停止方法。

  • 启动Service

Ability为开发者提供了 startAbility() 方法来启动另外一个 Ability。因为Service也是 Ability 的一种,开发者同样可以通过将 Intent 传递给该方法来启动 Service。不仅支持启动本地 Service,还支持启动远程 Service。

开发者可以通过构造包含 DeviceId、BundleName 与 AbilityName 的 Operation 对象来设置目标 Service 信息。这三个参数的含义如下:

  • DeviceId:表示设备 ID。如果是本地设备,则可以直接留空;如果是远程设备,可以通过 ohos.distributedschedule.interwork.DeviceManager 提供的 getDeviceList 获取设备列表,详见《 API 参考》。
  • BundleName:表示包名称。
  • AbilityName:表示待启动的 Ability 名称。

启动本地设备 Service 的代码示例如下:

  Intent intent = new Intent();
  Operation operation = new Intent.OperationBuilder()
          .withDeviceId("")
          .withBundleName("com.huawei.hiworld.himusic")
          .withAbilityName("com.huawei.hiworld.himusic.entry.ServiceAbility")
          .build();
  intent.setOperation(operation);
  startAbility(intent);

启动远程设备 Service 的代码示例如下:

  Operation operation = new Intent.OperationBuilder()
          .withDeviceId("deviceId")
          .withBundleName("com.huawei.hiworld.himusic")
          .withAbilityName("com.huawei.hiworld.himusic.entry.ServiceAbility")
          .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) // 设置支持分布式调度系统多设备启动的标识
          .build();
  Intent intent = new Intent();
  intent.setOperation(operation);
  startAbility(intent);

执行上述代码后,Ability 将通过 startAbility() 方法来启动 Service。

  • 如果 Service 尚未运行,则系统会先调用 onStart()来初始化 Service,再回调 Service 的 onCommand() 方法来启动 Service。
  • 如果 Service 正在运行,则系统会直接回调 Service 的 onCommand() 方法来启动 Service。

  • 停止 Service

Service 一旦创建就会一直保持在后台运行,除非必须回收内存资源,否则系统不会停止或销毁 Service。开发者可以在 Service 中通过 terminateAbility() 停止本 Service 或在其他 Ability 调用 stopAbility() 来停止 Service。

停止 Service 同样支持停止本地设备 Service 和停止远程设备 Service,使用方法与启动 Service 一样。一旦调用停止 Service 的方法,系统便会尽快销毁 Service。