用户登录
用户注册

分享至

21、鸿蒙OS 连接Service,鸿蒙OS 生命周期

  • 作者: A蛋卷
  • 来源: 51数据库
  • 2022-10-14

如果 Service 需要与 Page Ability 或其他应用的 Service Ability 进行交互,则应创建用于连接的 Connection。Service 支持其他 Ability 通过 connectAbility()方法与其进行连接。

在使用 connectAbility() 处理回调时,需要传入目标 Service 的 Intent 与 IAbilityConnection 的实例。IAbilityConnection 提供了两个方法供开发者实现: onAbilityConnectDone() 用来处理连接的回调,onAbilityDisconnectDone() 用来处理断开连接的回调。

连接 Service 的代码示例如下:


// 创建连接回调实例private IAbilityConnection connection = new IAbilityConnection() {    // 连接到Service的回调    @Override    public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int resultCode) {        // 在这里开发者可以拿到服务端传过来IRemoteObject对象,从中解析出服务端传过来的信息    }     // 断开与连接的回调    @Override    public void onAbilityDisconnectDone(ElementName elementName, int resultCode) {    }};// 连接ServiceconnectAbility(intent, connection);

同时,Service 侧也需要在 onConnect() 时返回 IRemoteObject,从而定义与 Service 进行通信的接口。onConnect() 需要返回一个 IRemoteObject 对象,HarmonyOS 提供了 IRemoteObject 的默认实现,用户可以通过继承 RemoteObject 来创建自定义的实现类。Service 侧把自身的实例返回给调用侧的代码示例如下:


// 创建自定义IRemoteObject实现类private class MyRemoteObject extends RemoteObject {    public MyRemoteObject() {        super("MyRemoteObject");    }} // 把IRemoteObject返回给客户端@Overrideprotected IRemoteObject onConnect(Intent intent) {    return new MyRemoteObject();}

鸿蒙OS 生命周期

与 Page 类似,Service 也拥有生命周期,如图1所示。根据调用方法的不同,其生命周期有以下两种路径:


  • 启动 Service

该 Service 在其他 Ability 调用 startAbility() 时创建,然后保持运行。其他 Ability 通过调用 stopAbility() 来停止 Service,Service 停止后,系统会将其销毁。


  • 连接 Service

该 Service 在其他 Ability 调用 connectAbility() 时创建,客户端可通过调用 disconnectAbility() 断开连接。多个客户端可以绑定到相同 Service,而且当所有绑定全部取消后,系统即会销毁该 Service。

图1 Service 生命周期 点击放大


软件
前端设计
程序设计
Java相关