日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Harmony生命周期

發(fā)布時間:2023/11/28 生活经验 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Harmony生命周期 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Harmony生命周期
系統(tǒng)管理或用戶操作等行為,均會引起Page實例在其生命周期的不同狀態(tài)之間進行轉(zhuǎn)換。Ability類提供的回調(diào)機制能夠讓Page及時感知外界變化,從而正確地應對狀態(tài)變化(比如釋放資源),這有助于提升應用的性能和穩(wěn)健性。
Page生命周期回調(diào)
Page生命周期的不同狀態(tài)轉(zhuǎn)換及其對應的回調(diào),如圖1所示。
圖1 Page生命周期

? onStart()
當系統(tǒng)首次創(chuàng)建Page實例時,觸發(fā)該回調(diào)。對于一個Page實例,該回調(diào)在其生命周期過程中僅觸發(fā)一次,Page在該邏輯后將進入INACTIVE狀態(tài)。開發(fā)者必須重寫該方法,并在此配置默認展示的AbilitySlice。

  1.  @Override
    
  2.  public void onStart(Intent intent) {
    
  3.      super.onStart(intent);
    
  4.      super.setMainRoute(FooSlice.class.getName());
    
  5.  }
    

? onActive()
Page會在進入INACTIVE狀態(tài)后來到前臺,然后系統(tǒng)調(diào)用此回調(diào)。Page在此之后進入ACTIVE狀態(tài),該狀態(tài)是應用與用戶交互的狀態(tài)。Page將保持在此狀態(tài),除非某類事件發(fā)生導致Page失去焦點,比如用戶點擊返回鍵或?qū)Ш降狡渌鸓age。當此類事件發(fā)生時,會觸發(fā)Page回到INACTIVE狀態(tài),系統(tǒng)將調(diào)用onInactive()回調(diào)。此后,Page可能重新回到ACTIVE狀態(tài),系統(tǒng)將再次調(diào)用onActive()回調(diào)。因此,開發(fā)者通常需要成對實現(xiàn)onActive()和onInactive(),并在onActive()中獲取在onInactive()中被釋放的資源。
? onInactive()
當Page失去焦點時,系統(tǒng)將調(diào)用此回調(diào),此后Page進入INACTIVE狀態(tài)。開發(fā)者可以在此回調(diào)中實現(xiàn)Page失去焦點時應表現(xiàn)的恰當行為。
? onBackground()
如果Page不再對用戶可見,系統(tǒng)將調(diào)用此回調(diào),通知開發(fā)者用戶進行相應的資源釋放,此后Page進入BACKGROUND狀態(tài)。開發(fā)者應該在此回調(diào)中釋放Page不可見時無用的資源,或在此回調(diào)中執(zhí)行較為耗時的狀態(tài)保存操作。
? onForeground()
處于BACKGROUND狀態(tài)的Page仍然駐留在內(nèi)存中,當重新回到前臺時(比如用戶重新導航到此Page),系統(tǒng)將先調(diào)用onForeground()回調(diào)通知開發(fā)者,而后Page的生命周期狀態(tài)回到INACTIVE狀態(tài)。開發(fā)者應當在此回調(diào)中重新申請在onBackground()中釋放的資源,最后Page的生命周期狀態(tài)進一步回到ACTIVE狀態(tài),系統(tǒng)將通過onActive()回調(diào)通知開發(fā)者用戶。
? onStop()
系統(tǒng)將要銷毀Page時,將會觸發(fā)此回調(diào)函數(shù),通知用戶進行系統(tǒng)資源的釋放。銷毀Page的可能原因包括以下幾個方面:
? 用戶通過系統(tǒng)管理能力關(guān)閉指定Page,例如使用任務(wù)管理器關(guān)閉Page。
? 用戶行為觸發(fā)Page的terminateAbility()方法調(diào)用,例如使用應用的退出功能。
? 配置變更導致系統(tǒng)暫時銷毀Page并重建。
? 系統(tǒng)出于資源管理目的,自動觸發(fā)對處于BACKGROUND狀態(tài)Page的銷毀。
AbilitySlice生命周期
AbilitySlice作為Page的組成單元,其生命周期是依托于其所屬Page生命周期的。AbilitySlice和Page具有相同的生命周期狀態(tài)和同名的回調(diào),當Page生命周期發(fā)生變化時,它的AbilitySlice也會發(fā)生相同的生命周期變化。此外,AbilitySlice還具有獨立于Page的生命周期變化,這發(fā)生在同一Page中的AbilitySlice之間導航時,此時Page的生命周期狀態(tài)不會改變。
AbilitySlice生命周期回調(diào)與Page的相應回調(diào)類似,因此不再贅述。由于AbilitySlice承載具體的頁面,開發(fā)者必須重寫AbilitySlice的onStart()回調(diào),并在此方法中通過setUIContent()方法設(shè)置頁面,如下所示:

  1.  @Override
    
  2.  protected void onStart(Intent intent) {
    
  3.      super.onStart(intent);
    
  4.      setUIContent(ResourceTable.Layout_main_layout);
    
  5.  }
    

AbilitySlice實例創(chuàng)建和管理通常由應用負責,系統(tǒng)僅在特定情況下會創(chuàng)建AbilitySlice實例。例如,通過導航啟動某個AbilitySlice時,是由系統(tǒng)負責實例化;但是在同一個Page中不同的AbilitySlice間導航時,則由應用負責實例化。
Page與AbilitySlice生命周期關(guān)聯(lián)
當AbilitySlice處于前臺且具有焦點時,其生命周期狀態(tài)隨著所屬Page的生命周期狀態(tài)的變化而變化。當一個Page擁有多個AbilitySlice時,例如:MyAbility下有FooAbilitySlice和BarAbilitySlice,當前FooAbilitySlice處于前臺并獲得焦點,并即將導航到BarAbilitySlice,在此期間的生命周期狀態(tài)變化順序為:

  1. FooAbilitySlice從ACTIVE狀態(tài)變?yōu)镮NACTIVE狀態(tài)。
  2. BarAbilitySlice則從INITIAL狀態(tài)首先變?yōu)镮NACTIVE狀態(tài),然后變?yōu)锳CTIVE狀態(tài)(假定此前BarAbilitySlice未曾啟動)。
  3. FooAbilitySlice從INACTIVE狀態(tài)變?yōu)锽ACKGROUND狀態(tài)。
    對應兩個slice的生命周期方法回調(diào)順序為:
    FooAbilitySlice.onInactive() --> BarAbilitySlice.onStart() --> BarAbilitySlice.onActive() --> FooAbilitySlice.onBackground()
    在整個流程中,MyAbility始終處于ACTIVE狀態(tài)。但是,當Page被系統(tǒng)銷毀時,其所有已實例化的AbilitySlice將聯(lián)動銷毀,而不僅是處于前臺的AbilitySlice。

總結(jié)

以上是生活随笔為你收集整理的Harmony生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。