购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.8 实战:Service Ability生命周期的例子

为了更好地理解Service Ability的生命周期,我们将创建一个名为ServiceAbilityLifeCycle的应用作为演示。

5.8.1 创建Service

在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相关的配置信息。

5.8.2 创建远程对象

timeRemoteObject是TimeRemoteObject类的实例。TimeRemoteObject类是远程对象,继承自LocalRemoteObject,代码如下:

其中,time属性用于返回给调用方服务器的当前时间。

5.8.3 修改MainAbilitySlice

修改MainAbilitySlice的代码如下:

上述代码在onStart()方法中增加了对Text的事件监听。当点击textStart时,会启动本地服务并连接本地服务;当点击textEnd时,会断开本地服务并关闭本地服务。

5.8.4 修改ability_main.xml

修改ability_main.xml的内容如下:

上述代码主要定义了两个Text,一个用于触发Start点击事件,一个用于触发End点击事件。

5.8.5 运行

将应用在模拟器中运行,如图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等生命周期。 vPXINmGFQZsVThKqnIuNCgMNVms16qyFvFUsFNzyw8JSXBoN5u9hWkTdTl3Gmu08

点击中间区域
呼出菜单
上一章
目录
下一章
×