为了更好地理解Service Ability的生命周期,本节将用一个示例来演示。采用Car设备类型,创建一个名为ServiceAbilityLifeCycle的应用。
在DevEco Studio中,可以通过图5-16所示方式创建一个Empty Service Ability。
图5-16 创建一个Empty Service Ability
根据图5-17所示引导,创建一个名为TimeServiceAbility的Service。
图5-17 创建一个名为TimeServiceAbility的Service
注意:上述步骤中的Enable backgroud mode(后台模式)先不要启用。
在自动创建的TimeServiceAbility的基础上,修改代码如下:
其中,timeRemoteObject是一个IRemoteObject子类的实例,可以通过timeRemoteObject将当前时间返回给调用侧。
同时,在配置文件中会自动新增TimeServiceAbility相关的配置信息,代码如下:
timeRemoteObject是TimeRemoteObject类的实例。TimeRemoteObject类是远程对象,继承自LocalRemoteObject,代码如下:
同时,Service 侧也需要在 onConnect() 方法中返回 IRemoteObject对象。
修改MainAbilitySlice,代码如下:
上述代码中,在onStart()方法中增加了对Text的事件监听。当单击textStart按钮时,会启动本地服务、连接本地服务;当单击textEnd按钮时,会断开本地服务、关闭本地服务。
修改ability_main.xml,代码如下:
上述代码主要定义了两个Text,一个用于触发Start单击事件,另一个用于触发End单击事件。
在Car模拟器中运行该应用,如图5-18所示。
图5-18 在Car模拟器中运行应用
此时,能看到控制台输出如下内容:
从上述日志可以看出,MainAbilitySlice已经启动。
单击文本Start,触发单击事件,此时能看到控制台输出如下内容:
当单击文本Start时,会启动本地服务、连接本地服务。而TimeServiceAbility也分别执行on-Start、onCommand以及onConnect等生命周期,并将当前时间返回给MainAbilitySlice。
单击文本End,触发单击事件,此时能看到控制台输出如下内容:
当单击文本End 时,会断开本地服务、关闭本地服务。而TimeServiceAbility也分别执行onDisconnect、onBackground以及onStop等生命周期。