由華為出品、我國完全自主知識產權的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程式員打下了堅實基礎,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/174906.html
標籤:其他
下一篇:android studio報java.lang.NoSuchMethodError: com.intellij.ide.plugins.PluginManagerCore解決辦法
