为了更好地理解Service Ability的生命周期,我们将创建一个名为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将当前时间返回给调用侧。稍后,我们将创建TimeRemoteObject类。
同时,在配置文件中会自动新增TimeServiceAbility相关的配置信息。
timeRemoteObject是TimeRemoteObject类的实例。TimeRemoteObject类是远程对象,继承自LocalRemoteObject,代码如下:
其中,time属性用于返回给调用方服务器的当前时间。
修改MainAbilitySlice的代码如下:
上述代码在onStart()方法中增加了对Text的事件监听。当点击textStart时,会启动本地服务并连接本地服务;当点击textEnd时,会断开本地服务并关闭本地服务。
修改ability_main.xml的内容如下:
上述代码主要定义了两个Text,一个用于触发Start点击事件,一个用于触发End点击事件。
将应用在模拟器中运行,如图5-18所示。
图5-18 在模拟器中运行应用
此时,能看到控制台输出如下内容:
08-29 14:30:38.115 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: onStart
从上述日志可以看出,MainAbilitySlice已经启动。
点击文本Start后,触发点击事件,此时能看到控制台输出如下内容:
08-29 14:32:58.807 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: startupLocalService 08-29 14:32:58.813 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: connectLocalService 08-29 14:32:58.817 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: onStart 08-29 14:32:58.819 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: onCommand 08-29 14:32:58.822 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: [2532d12a1ac57b7, f8a3c0, d1978e] onConnect 08-29 14:32:58.838 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: [2532d12a1ac57b7, 21de4fa, 2fd6c0a] onAbilityConnectDone, time: 2021-08-29T14:32:58.828
当点击文本Start时,会启动本地服务并连接本地服务。而TimeServiceAbility分别执行了onStart、onCommand以及onConnect等生命周期,并将当前时间返回给了MainAbilitySlice。
点击文本End后,触发点击事件,此时能看到控制台输出如下内容:
08-29 14:33:43.856 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: disconnectLocalService 08-29 14:33:43.859 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: stopLocalService 08-29 14:33:43.862 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: [2532d22a47d0292, 27497f3, 105ac6e] onDisconnect 08-29 14:33:43.864 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: onBackground 08-29 14:33:43.864 25562-25562/com.waylau.hmos.serviceabilitylifecycle I 00001/TimeServiceAbility: onStop
当点击文本End时,会断开本地服务并关闭本地服务。而TimeServiceAbility分别执行了onDisconnect、onBackground以及onStop等生命周期。