启动Service

介绍通过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.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。
  • 停止Service

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

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

results matching ""

    No results matching ""