當使用者開啟、切換和返回到對應應用時,應用中的UIAbility例項會在其生命週期的不同狀態之間轉換。UIAbility類提供了一系列回撥,透過這些回撥可以知道當前UIAbility例項的某個狀態發生改變,會經過UIAbility例項的建立和銷燬,或者UIAbility例項發生了前後臺的狀態切換。
UIAbility的生命週期包括Create、Foreground、Background、Destroy四個狀態,如下圖所示
Create狀態
Create狀態為在應用載入過程中,UIAbility例項建立完成時觸發,系統會呼叫onCreate()回撥。可以在該回撥中進行頁面初始化操作,例如變數定義資源載入等,用於後續的UI展示
WindowStageCreate和WindowStageDestroy狀態
UIAbility例項建立完成之後,在進入Foreground之前,系統會建立一個WindowStage。WindowStage建立完成後會進入onWindowStageCreate()回撥,可以在該回撥中設定UI載入、設定WindowStage的事件訂閱
在onWindowStageCreate()回撥中透過loadContent()方法設定應用要載入的頁面,並根據需要呼叫on('windowStageEvent')方法訂閱WindowStage的事件(獲焦/失焦、切到前臺/切到後臺、前臺可互動/前臺不可互動)。對應於onWindowStageCreate()回撥。在UIAbility例項銷燬之前,則會先進入onWindowStageDestroy()回撥,可以在該回撥中釋放UI資源。對應onWindowStageWillDestroy()回撥,在WindowStage銷燬前執行,此時WindowStage可以使用。
Foreground和Background狀態
Foreground和Background狀態分別在UIAbility例項切換至前臺和切換至後臺時觸發,對應於onForeground()回撥和onBackground()回撥。
onForeground()回撥,在UIAbility的UI可見之前,如UIAbility切換至前臺時觸發。可以在onForeground()回撥中申請系統需要的資源,或者重新申請在onBackground()中釋放的資源。
onBackground()回撥,在UIAbility的UI完全不可見之後,如UIAbility切換至後臺時候觸發。可以在onBackground()回撥中釋放UI不可見時無用的資源,或者在此回撥中執行較為耗時的操作,例如狀態儲存等。
當應用的UIAbility例項已建立,且UIAbility配置為singleton啟動模式時,再次呼叫startAbility()方法啟動該UIAbility例項時,只會進入該UIAbility的onNewWant()回撥,不會進入其onCreate()和onWindowStageCreate()生命週期回撥。應用可以在該回撥中更新要載入的資源和資料等,用於後續的UI展示。
Destroy狀態
Destroy狀態在UIAbility例項銷燬時觸發。可以在onDestroy()回撥中進行系統資源的釋放、資料的儲存等操作。