用Android的Activity生命週期解釋HarmonyOS的Page Ability生命週期 | 解讀鴻蒙源碼

由華爲出品、我國徹底自主知識產權的HarmonyOS是一款「面向將來」、面向全場景(移動辦公、運動健康、社交通訊、媒體娛樂等)的分佈式操做系統 。現已於2020年9月10日開源,並面向應用開發者發佈Beta版本。預計明年鴻蒙將取代Android,全面支持華爲手機。git

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,不在本文討論範圍內)spa

(2)onActive():操作系統

Page Ability會在進入前臺狀態(ACTIVE)後系統調用onActive()方法。Page Ability會一直保持ACTIVE狀態,直到Page Ability失去焦點。.net

本方法能夠理解爲Activity的onResume()方法。3d

(3)onInactive():blog

當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程序員打下了堅實基礎。

本文參與了「解讀鴻蒙源碼」技術徵文,歡迎正在閱讀的你也加入。

相關文章
相關標籤/搜索