由華為出品、我國完全自主智慧財產權的HarmonyOS是一款「面向未來」、面向全場景(移動辦公、運動健康、社交通訊、媒體娛樂等)的分散式作業系統 。現已於2020年9月10日開源,並面向應用開發者釋出Beta版本。預計明年鴻蒙將取代Android,全面支援華為手機。
Android程式設計師轉型HarmonyOS程式設計師的已經提上了日程,學習HarmonyOS的開發是每個Android程式設計師的頭等大事。就像每個Android程式設計師都是從Activity的生命週期開始學習Android開發的,我們轉型Harmony開發也要從Page Ability的生命週期入手。本文我將用Android的Activity生命週期解釋HarmonyOS的Page Ability生命週期。
如官方圖所示,Page Ability的生命週期分初始狀態(INITIAL)、前臺狀態(ACTIVE)、可見狀態(INACTIVE)和後臺狀態(BACKGROUND),與Android的Activity的生命週期狀態大同小異(把不可見狀態分為了「剛建立」和「快結束」兩種),觸發這些狀態的回撥方法也可以理解為Activity的某些方法:
(1)onStart():
當系統首次建立Page Ability範例時,會觸發onStart()方法。就像onCreate()方法在一個Activity範例的生命週期過程中只呼叫一次一樣,對於一個Page Ability範例,onStart()方法在其生命週期過程中也能且僅能觸發一次,Page Ability在此方法執行後進入可見狀態(INACTIVE)。
本方法可以理解為Activity的onCreate() + onStart()方法,但有所不同的是Page Ability的onStart()方法必須重寫,因為需要在此方法內設定預設展示的AbilitySlice(可以理解為Android的Fragment,不在本文討論範圍內)
(2)onActive():
Page Ability會在進入前臺狀態(ACTIVE)後系統呼叫onActive()方法。Page Ability會一直保持ACTIVE狀態,直到Page Ability失去焦點。
本方法可以理解為Activity的onResume()方法。
(3)onInactive():
當Page Ability失去焦點(對使用者不可操作,可能可見,也可能不可見)時,會呼叫此方法,然後Page Ability進入INACTIVE狀態。常見的場景有從螢幕頂部拉出Notification或者被非全螢幕的Page Ability不完全遮擋等。
本方法可以理解為Activity的onPause()方法。就像Activity的onResume()與onPause()方法經常成對出現一樣,Page Ability的onActive()也與onInactive()方法成對出現,並在onActive()中獲取在onInactive()中被釋放的資源。
至於onInactive()是否像onPause()方法與AMS進行Binder通訊啟動新Activity一樣為了啟動新Page Ability做了點什麼事,以及onActive()是否像onResume()方法執行完畢就意味著ViewRootImpl建立一樣為了繪製UI做了點什麼事,屬於HarmonyOS進階知識,不在本文討論範圍內。
(4)onBackground():
如果Page不再對使用者可見,系統將呼叫此回撥通知開發者使用者進行相應的資源釋放,此後Page進入BACKGROUND狀態。開發者應該在此回撥中釋放Page不可見時無用的資源,或在此回撥中執行較為耗時的狀態儲存操作。
本方法可以理解為Activity的onStop()方法
(5)onForeground():
處於BACKGROUND狀態的Page仍然駐留在記憶體中,當重新回到前臺時(比如使用者重新導航到此Page),系統將先呼叫onForeground()回撥通知開發者,而後Page的生命週期狀態回到INACTIVE狀態。開發者應當在此回撥中重新申請在onBackground()中釋放的資源,最後Page的生命週期狀態進一步回到ACTIVE狀態,系統將通過onActive()回撥通知開發者使用者。
本方法可以理解為Activity的onRestart() + onStart()方法。
(6)onStop():
系統將要銷燬Page時,將會觸發此回撥函數,通知使用者進行系統資源的釋放。銷燬Page的可能原因包括以下幾個方面:
本方法可以理解為Activity的onDestory()方法。
通過本文,我們瞭解了HarmonyOS的Page Ability的生命週期,為轉型HarmonyOS程式設計師打下了堅實基礎。