为了更好地理解Page与AbilitySlice的生命周期,我们将创建一个名为PageAndAbilitySliceLifeCycle的应用作为演示。同时,参考前文5.4节的步骤创建PayAbility。
在初始化应用时,PageAndAbilitySliceLifeCycle应用已经包含一个主AbilitySlice,即MainAbilitySlice。对MainAbilitySlice进行修改,代码如下:
在MainAbilitySlice类中:
· MainAbilitySlice重写了AbilitySlice的生命周期回调方法。
· 在每个生命周期回调方法中,通过HiLog日志工具将状态进行打印,以便能够在控制台看到实时的状态。
· 在Text中增加了点击事件,以便导航到其他AbilitySlice。
创建PayAbility时会自动创建一个PayAbilitySlice类。修改PayAbilitySlice代码如下:
在PayAbilitySlice类中:
· PayAbilitySlice重写了AbilitySlice的生命周期回调方法。
· 在每个生命周期回调方法中,通过HiLog日志工具将状态进行打印,以便能够在控制台看到实时的状态。
· 在Text中增加了点击事件,以便导航到其他AbilitySlice。
为了体现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(中文),则会在组件上显示“你好,支付”字样。
为了实现AbilitySlice之间的路由和导航,在MainAbility中通过addActionRoute方法来添加到PayAbilitySlice的路由,代码如下:
其中,上述action.pay是指定路由动作的名称。这个名称还需要在config.json的actions数组中添加,配置如下:
将应用在模拟器中运行,如图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状态。