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

5.6 实战:Page与AbilitySlice生命周期的例子

为了更好地理解Page与AbilitySlice的生命周期,我们将创建一个名为PageAndAbilitySliceLifeCycle的应用作为演示。同时,参考前文5.4节的步骤创建PayAbility。

5.6.1 修改MainAbilitySlice

在初始化应用时,PageAndAbilitySliceLifeCycle应用已经包含一个主AbilitySlice,即MainAbilitySlice。对MainAbilitySlice进行修改,代码如下:

在MainAbilitySlice类中:

· MainAbilitySlice重写了AbilitySlice的生命周期回调方法。

· 在每个生命周期回调方法中,通过HiLog日志工具将状态进行打印,以便能够在控制台看到实时的状态。

· 在Text中增加了点击事件,以便导航到其他AbilitySlice。

5.6.2 修改PayAbilitySlice

创建PayAbility时会自动创建一个PayAbilitySlice类。修改PayAbilitySlice代码如下:

在PayAbilitySlice类中:

· PayAbilitySlice重写了AbilitySlice的生命周期回调方法。

· 在每个生命周期回调方法中,通过HiLog日志工具将状态进行打印,以便能够在控制台看到实时的状态。

· 在Text中增加了点击事件,以便导航到其他AbilitySlice。

5.6.3 修改PayAbilitySlice布局和文字

为了体现MainAbilitySlice和PayAbilitySlice的不同,我们需要在“面”上“整容”一下。从5.6.2节的代码可以得知,PayAbilitySlice通过setUIContent方法引用了ResourceTable.Layout_ability_pay的布局文件,而ResourceTable.Layout_ability_pay其实就是layout目录下的ability_pay.xml文件。

对ability_pay.xml的内容修改如下:

ability_pay.xml基本上与ability_main.xml类似,主要的差异点是:

· id设置为$+id:text_pay。

· background_element设置为$graphic:background_ability_pay。

· text设置为$string:payability_money。

上面这个payability_money来自于en.json文件,用于定义在不同的语言环境下所要显示的组件的文字内容。

以en.json文件为例,内容修改如下:

上述代码定义了当组件引用$string:payability_money时,如果语言环境是en(英语),则会在组件上显示Pay me the money字样。

同理,我们修改zh.json的内容如下:

上述代码定义了当组件引用$string:payability_money时,如果语言环境是zh(中文),则会在组件上显示“你好,支付”字样。

5.6.4 实现AbilitySlice之间的路由

为了实现AbilitySlice之间的路由和导航,在MainAbility中通过addActionRoute方法来添加到PayAbilitySlice的路由,代码如下:

其中,上述action.pay是指定路由动作的名称。这个名称还需要在config.json的actions数组中添加,配置如下:

5.6.5 运行

将应用在模拟器中运行,如图5-9所示。此时,能看到控制台输出如下内容:

   08-29 11:40:34.932 13949-13949/? I 00001/MainAbilitySlice:  onStart
   08-29 11:40:34.952 13949-13949/? I 00001/MainAbilitySlice:  onActive

从上述日志可以看出,MainAbilitySlice已经启动并处于ACTIVE状态。

点击文本“你好,世界”后,可以切换到“你好,支付”界面,如图5-10所示。

图5-9 在模拟器中运行应用

图5-10 切换到“你好,支付”界面

此时,能看到控制台输出如下内容:

    08-29 11:43:34.820 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onInactive
    08-29 11:43:34.847 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onStart
    08-29 11:43:34.848 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onActive
    08-29 11:43:34.848 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onBackground

从上述日志可以看出,MainAbilitySlice失去了焦点并处于INACTIVE状态,而PayAbilitySlice启动并处于ACTIVE状态,最终MainAbilitySlice进入BACKGROUND状态。

再点击文本“你好,支付”,可以切换到“你好,世界”界面,如图5-11所示。

图5-11 切换到“你好,世界”界面

此时,能看到控制台输出如下内容:

    08-29 11:44:46.231 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onInactive
    08-29 11:44:46.234 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onStart
    08-29 11:44:46.234 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onActive
    08-29 11:44:46.234 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onBackground

从上述日志可以看出,PayAbilitySlice失去了焦点并处于INACTIVE状态,而MainAbilitySlice启动并处于ACTIVE状态。最终PayAbilitySlice进入BACKGROUND状态。

点击模拟器的返回按钮,返回“你好,支付”界面,如图5-12所示。

图5-12 返回“你好,支付”界面

此时,能看到控制台输出如下内容:

    08-29 11:45:58.747 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onInactive
    08-29 11:45:58.747 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onForeground
    08-29 11:45:58.751 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onActive
    08-29 11:45:58.751 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onBackground
    08-29 11:45:58.751 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onStop

从上述日志可以看出,MainAbilitySlice失去了焦点并处于INACTIVE状态,而PayAbilitySlice重新回到前台,并处于ACTIVE状态。最终MainAbilitySlice进入BACKGROUND状态,最后被销毁。

再次点击模拟器的返回按钮,返回“你好,世界”界面。此时,能看到控制台输出如下内容:

    08-29 11:48:37.999 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onInactive
    08-29 11:48:37.999 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onForeground
    08-29 11:48:38.002 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onActive
    08-29 11:48:38.003 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onBackground
    08-29 11:48:38.003 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/PayAbilitySlice:  onStop

从上述日志可以看出,PayAbilitySlice失去了焦点并处于INACTIVE状态,而MainAbilitySlice重新回到前台,并处于ACTIVE状态。最终PayAbilitySlice进入BACKGROUND状态,最后被销毁。

再次点击模拟器的返回按钮,返回系统主界面,如图5-13所示。

图5-13 返回系统主界面

此时,能看到控制台输出如下内容:

    08-29 11:49:52.104 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onInactive
    08-29 11:49:53.827 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onBackground
    08-29 11:49:53.895 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onStop

从上述日志可以看出,MainAbilitySlice处于INACTIVE状态,接着进入BACKGROUND状态,最后被销毁。

当点击系统主界面的PageAndAbilitySliceLifeCycle应用图标时,将进入PageAndAbilitySliceLifeCycle应用,如图5-14所示。

图5-14 进入PageAndAbilitySliceLifeCycle应用

此时,能看到控制台输出如下内容:

    08-29 11:53:21.660 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onStart
    08-29 11:53:21.689 13949-13949/com.waylau.hmos.pageandabilityslicelifecycle
I 00001/MainAbilitySlice:  onActive

从上述日志可以看出,MainAbilitySlice启用并处于ACTIVE状态。 9ZDj/yL9rMwfxOkhGK/m+FrrXziEnHCitmFLaSmSqrmsKTk5RuOdiAU85xvi8TCF

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