最近对鸿蒙系统的基本架构有了一些浅显的了解,于是打算开始学习下开发,开发的第一步当然是从Ability的使用开始。
首先测试下Ability的生命周期,全部代码如下:
package com.example.test3;
import com.example.test3.slice.MainAbilitySlice;
import com.example.test3.utils.HiLogUtil;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
log("Test3 onStart");
}
@Override
protected void onActive() {
super.onActive();
log("Test3 onActive");
}
@Override
protected void onInactive() {
super.onInactive();
log("Test3 onInactive");
}
@Override
protected void onForeground(Intent intent) {
super.onForeground(intent);
log("Test3 onForeground");
}
@Override
protected void onStop() {
super.onStop();
log("Test3 onStop");
}
public static void log(String log){
HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP,0,"我的日志");
HiLog.info(logLabel,log);
}
}
1.应用安装好后,点击启动:
01-08 15:07:18.532 7230-7230/? I 00000/我的日志: Test3 onStart
01-08 15:07:18.552 7230-7230/? I 00000/我的日志: Test3 onActive
2.点击home键返回桌面:
01-08 15:08:24.978 7230-7230/? I 00000/我的日志: Test3 onInactive
3.重新点击图标进入应用:
01-08 15:09:17.567 7230-7230/? I 00000/我的日志: Test3 onForeground
01-08 15:09:17.611 7230-7230/? I 00000/我的日志: Test3 onActive
4.由应用进入任务栏:
01-08 15:10:32.296 7230-7230/? I 00000/我的日志: Test3 onInactive
5.由任务栏回到应用:
01-08 15:11:27.416 7230-7230/? I 00000/我的日志: Test3 onForeground
01-08 15:11:27.424 7230-7230/? I 00000/我的日志: Test3 onActive
6.由任务栏直接清理掉后台:
01-08 15:12:24.007 7230-7230/? I 00000/我的日志: Test3 onStop
7.由应用按返回键退出应用:
01-08 15:13:50.550 7252-7252/com.example.test3 I 00000/我的日志: Test3 onInactive
01-08 15:13:51.253 7252-7252/com.example.test3 I 00000/我的日志: Test3 onStop
以下是官方说明文档的图示及解释:
- onStart()
当系统首次创建Page实例时,触发该回调。对于一个Page实例,该回调在其生命周期过程中仅触发一次,Page在该逻辑后将进入INACTIVE状态。开发者必须重写该方法,并在此配置默认展示的AbilitySlice。
- onActive()
Page会在进入INACTIVE状态后来到前台,然后系统调用此回调。Page在此之后进入ACTIVE状态,该状态是应用与用户交互的状态。Page将保持在此状态,除非某类事件发生导致Page失去焦点,比如用户点击返回键或导航到其他Page。当此类事件发生时,会触发Page回到INACTIVE状态,系统将调用onInactive()回调。此后,Page可能重新回到ACTIVE状态,系统将再次调用onActive()回调。因此,开发者通常需要成对实现onActive()和onInactive(),并在onActive()中获取在onInactive()中被释放的资源。
- onInactive()
当Page失去焦点时,系统将调用此回调,此后Page进入INACTIVE状态。开发者可以在此回调中实现Page失去焦点时应表现的恰当行为。
- onBackground()
如果Page不再对用户可见,系统将调用此回调通知开发者用户进行相应的资源释放,此后Page进入BACKGROUND状态。开发者应该在此回调中释放Page不可见时无用的资源,或在此回调中执行较为耗时的状态保存操作。
- onForeground()
处于BACKGROUND状态的Page仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此Page),系统将先调用onForeground()回调通知开发者,而后Page的生命周期状态回到INACTIVE状态。开发者应当在此回调中重新申请在onBackground()中释放的资源,最后Page的生命周期状态进一步回到ACTIVE状态,系统将通过onActive()回调通知开发者用户。
- onStop()
系统将要销毁Page时,将会触发此回调函数,通知用户进行系统资源的释放。销毁Page的可能原因包括以下几个方面:
- 用户通过系统管理能力关闭指定Page,例如使用任务管理器关闭Page。
- 用户行为触发Page的terminateAbility()方法调用,例如使用应用的退出功能。
- 配置变更导致系统暂时销毁Page并重建。
- 系统出于资源管理目的,自动触发对处于BACKGROUND状态Page的销毁。
- 官方文档链接:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-lifecycle-0000000000029840