Page Ability 生命周期 系统管理或用户操作等行为均会引起 Page 实例在其生命周期的不同状态之间进行转换。 Ability 类提供的回调机制能够让 Page 及时感知外界变化,从而正确地应对状态变化(比如释 放资源),这有助于提升应用的性能和稳健性。 3.2.2.1 Page 生命周期回调 Page 生命周期的不同状态转换及其对应的回调,如图 1 所示
onStart() 当系统首次创建 Page 实例时,触发该回调。对于一个 Page 实例,该回调在其生命周期 过程中仅触发一次,Page 在该逻辑后将进入 INACTIVE 状态。开发者必须重写该方法,并在 此配置默认展示的 AbilitySlice。 @Override public void onStart(Intent intent) { super.onStart(intent); super.setMainRoute(FooSlice.class.getName()); } 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 的销毁。