鴻蒙中冷啟動分析:Launch分析

啟動的分類(熱身環節)

啟動動類型觸發條件系統開銷 & 速度主要優化方向
冷啟動應用進程不存在(首次啟動或進程被殺后啟動)最高,需創建進程、加載資源、初始化所有組件主要優化目標,減少主線程任務,延遲初始化
熱啟動應用進程仍在后臺(從后臺喚起或切換回來)最低,只需將已有Activity切到前臺保持進程存活,但需避免因后臺存活耗電或被殺
溫啟動進程可能存在,但Activity需重建(如Back退出后又啟動或系統回收內存后)中等,可能需重建Activity優化Activity重建速度,利用Saved Instance State

🔍 理解冷啟動

應用冷啟動時,系統需要創建新進程,并完成從Application初始化到首屏Activity渲染的完整過程。這個過程通常會給用戶呈現一個空白窗口(或主題指定的預覽窗口),直到首屏完成繪制。

冷啟動的完整流程可以概括為以下幾個關鍵階段:

  1. 系統準備進程:Launcher通過Binder IPC通知system_server進程,system_server再請求Zygotefork出新應用進程

  2. 應用進程初始化

    • 執行ApplicationattachBaseContext()onCreate()方法。

    • 啟動主線程(UI線程)

    • 創建并初始化主Activity

  3. 創建和渲染視圖:主Activity執行onCreate()加載布局)、onStart()onResume(),接著進行測量(measure)、布局(layout)、繪制(draw),最終內容被呈現到屏幕,替換之前的預覽窗口。

🐢 常見瓶頸與優化建議

冷啟動耗時通常消耗在以下方面(安卓為例子):

  • 主線程繁重的初始化工作:在Application或首屏ActivityonCreate同步執行大量耗時的第三方庫初始化、網絡請求、密集I/O操作(如讀寫數據庫或SharedPreferences)、復雜計算等,會阻塞UI渲染。

  • 復雜的布局和視圖層次:首屏XML布局過于復雜,嵌套層次太深,或使用了耗時操作的自定義View,會導致inflatemeasurelayout階段非常緩慢8。

  • 過多的Class加載和對象初始化:加載大量類(特別是第三方庫的類)、創建大量臨時對象,會增加CPU壓力并可能觸發GC,導致卡頓。

優化思路主要是轉移、減少和推遲

  • 異步初始化與懶加載

    • 非必需立即使用的組件(如某些第三方SDK、緩存預加載)放到后臺線程初始化(如使用IntentServiceWorkManager)。

    • 對于一些組件,將其初始化推遲到真正需要使用的時候。

    • 注意線程競爭,避免“偽異步”。

  • 優化首屏布局和渲染

    • 簡化布局結構,減少不必要的嵌套和視圖數量,考慮使用ConstraintLayout

    • 避免在UI線程進行耗時的測量和繪制操作

  • 關注Application的創建過程

    • 優化Application中的邏輯,只保留最必需的初始化。

    • 控制方法數,避免過多的Dex文件,這會增加加載時間。

  • 利用主題預覽窗減少白屏感:通過為啟動Activity設置特殊的主題,其中android:windowBackground設置為一張圖片或特定顏色的drawable,在頁面真正渲染完成前顯示,給用戶一種“應用已經啟動”的快速感覺,提升感知體驗

鴻蒙中

開發應用或元服務過程中,啟動速度是很重要的一個指標。如果開發者需要分析啟動過程的耗時瓶頸,優化應用或元服務的冷啟動速度,可使用DevEco Profiler提供的Launch場景分析能力,錄制啟動過程中的關鍵數據進行分析,從而識別出導致啟動緩慢的原因所在。此外,Launch任務窗口還集成了Time、CPU、Frame、Network場景分析任務的功能,方便開發者在分析啟動耗時的過程中同步對比同一時段的其他資源占用情況

啟動模式

啟動模式分為自動啟動和手動啟動,可點擊圖標切換兩種不同模式:

  • 若選擇自動啟動模式,當用戶使用Launch模板并開始錄制時,將主動重啟所選應用;
  • 手動啟動模式在開始錄制時,只會主動終止所選應用,等待界面出現彈窗提示啟動應用后,開發者需要手動啟動應用。

查看啟動過程中各階段的耗時情況

1:創建Launch場景調優分析任務并錄制相關數據,操作方法可參考性能問題定位:深度錄制,或在會話區選擇Open File,導入歷史數據。
說明

Launch分析任務支持在錄制前單擊,指定要錄制的泳道。“Launch”泳道顯示啟動生命周期各階段的耗時分布情況

  • 在任務分析窗口,可以通過“Ctrl+鼠標滾輪”縮放時間軸,通過“Shift+鼠標滾輪”左右移動時間軸。或使用快捷鍵W/S放大或縮小時間軸,使用A鍵/D鍵可以左右移動時間軸。
  • 將鼠標懸停在泳道任意位置,可以通過M鍵添加單點時間標簽。
  • 鼠標框選要關注的時間段,可以通過“Shift+M”添加時間段時間標簽。
  • 在任務分析窗口,可以通過“Ctrl+, ”向前選中單點時間標簽,通過“Ctrl+. ”向后選中單點時間標簽。
  • 在任務分析窗口,可以通過“Ctrl+[ ”向前選中時間段時間標簽,通過“Ctrl+]”向后選中時間段時間標簽。
  • Launch分析支持離線符號解析能力,請參見離線符號解析。
  • Launch分析支持動效場景調優,請參見支持動效場景調優。
2:單擊“Launch”泳道上的單個階段,或框選多個階段,在下方的“Details”頁簽中,可查看到所選階段的耗時統計情況。展開各階段的統計信息折疊表,可以看到各個任務的具體耗時信息。單擊跳轉按鈕,可直接跳轉至相關線程打點任務中。

3:切換到“Load ETS Files”頁簽,從DevEco Studio 6.0.0 Beta1版本開始,支持查看冷啟動過程中ETS文件的加載情況。各字段含義如下:
  • Category:該ETS文件在應用啟動過程中是否被使用。
  • Weight該ETS文件加載子節點文件(不包括自身)的總耗時。
  • Self:該ETS文件自身加載的耗時。
  • Import Count:該ETS文件被其他文件導入的次數。
  • File Name:該ETS文件的名稱。
  • Path:該ETS文件構建產物的路徑。

4:切換到“TOP Redundant”頁簽,可查看冷啟動過程中TOP 100冗余ETS加載文件信息。若File Name字段顯示為藍色,雙擊可快速跳轉至對應工程源文件

分析靜態資源庫加載耗時

  1. 展開“Launch”泳道,其中的“Static Initialization”子泳道展示啟動過程中各靜態資源庫的加載耗時。
  2. 單擊單個靜態資源庫色塊,或框選多個靜態資源庫,下方的“Details”區域展示所選對象的耗時統計信息。

    針對耗時超過預期的加載任務,可單擊跳轉按鈕,跳轉至相關線程打點任務中進行深度分析。

查看核心線程在CPU Core的運行情況

  1. 展開“Launch”泳道,其中的“Running CPU Cores”子泳道展示啟動過程中的關鍵線程具體運行在哪個CPU核心。
  2. 單擊單個進程色塊,或框選多個進程,下方的“Details”區域展示所選對象的運行情況統計信息。

    單擊對應CPU的跳轉按鈕,可進一步跳轉到CPU Core泳道查看詳細的調度信息。

指南優化應用性能冷啟動分析:Launch分析Launch模板基本操作

Launch模板基本操作

開發應用或元服務過程中,啟動速度是很重要的一個指標。如果開發者需要分析啟動過程的耗時瓶頸,優化應用或元服務的冷啟動速度,可使用DevEco Profiler提供的Launch場景分析能力,錄制啟動過程中的關鍵數據進行分析,從而識別出導致啟動緩慢的原因所在。此外,Launch任務窗口還集成了Time、CPU、Frame、Network場景分析任務的功能,方便開發者在分析啟動耗時的過程中同步對比同一時段的其他資源占用情況。

此處僅介紹“Launch”泳道相關內容,集成的Time、CPU、Frame、Network場景分析任務的功能請參考對應任務的章節。

說明

  • 不支持命令拉起的Release應用不能進行Launch分析。
  • 鎖屏狀態下可進行Launch錄制。

啟動模式

啟動模式分為

自動啟動和手動啟動,可點擊圖標切換兩種不同模式:

  • 若選擇自動啟動模式,當用戶使用Launch模板并開始錄制時,將主動重啟所選應用;
  • 手動啟動模式在開始錄制時,只會主動終止所選應用,等待界面出現彈窗提示啟動應用后,開發者需要手動啟動應用。

查看啟動過程中各階段的耗時情況

  1. 創建Launch場景調優分析任務并錄制相關數據,操作方法可參考性能問題定位:深度錄制,或在會話區選擇Open File,導入歷史數據。

    說明

    • 在任務分析窗口,可以通過“Ctrl+鼠標滾輪”縮放時間軸,通過“Shift+鼠標滾輪”左右移動時間軸。或使用快捷鍵W/S放大或縮小時間軸,使用A鍵/D鍵可以左右移動時間軸。
    • 將鼠標懸停在泳道任意位置,可以通過M鍵添加單點時間標簽。
    • 鼠標框選要關注的時間段,可以通過“Shift+M”添加時間段時間標簽。
    • 在任務分析窗口,可以通過“Ctrl+, ”向前選中單點時間標簽,通過“Ctrl+. ”向后選中單點時間標簽。
    • 在任務分析窗口,可以通過“Ctrl+[ ”向前選中時間段時間標簽,通過“Ctrl+]”向后選中時間段時間標簽。
    • Launch分析支持離線符號解析能力,請參見離線符號解析。
    • Launch分析支持動效場景調優,請參見支持動效場景調優。

    Launch分析任務支持在錄制前單擊

    指定要錄制的泳道。“Launch”泳道顯示啟動生命周期各階段的耗時分布情況。

  2. 單擊“Launch”泳道上的單個階段,或框選多個階段,在下方的“Details”頁簽中,可查看到所選階段的耗時統計情況。

    展開各階段的統計信息折疊表,可以看到各個任務的具體耗時信息。單擊跳轉按鈕,可直接跳轉至相關線程打點任務中。

  3. 切換到“Load ETS Files”頁簽,從DevEco Studio 6.0.0 Beta1版本開始,支持查看冷啟動過程中ETS文件的加載情況。各字段含義如下:

    • Category:該ETS文件在應用啟動過程中是否被使用。
    • Weight該ETS文件加載子節點文件(不包括自身)的總耗時。
    • Self:該ETS文件自身加載的耗時。
    • Import Count:該ETS文件被其他文件導入的次數。
    • File Name:該ETS文件的名稱。
    • Path:該ETS文件構建產物的路徑。

  4. 切換到“TOP Redundant”頁簽,可查看冷啟動過程中TOP 100冗余ETS加載文件信息。若File Name字段顯示為藍色,雙擊可快速跳轉至對應工程源文件。

說明

已上架應用市場的應用,不支持使用Load ETS Files或TOP Redundant頁簽查看冷啟動過程中ETS文件的加載情況。

分析靜態資源庫加載耗時

  1. 展開“Launch”泳道,其中的“Static Initialization”子泳道展示啟動過程中各靜態資源庫的加載耗時。
  2. 單擊單個靜態資源庫色塊,或框選多個靜態資源庫,下方的“Details”區域展示所選對象的耗時統計信息。

    針對耗時超過預期的加載任務,可單擊跳轉按鈕,跳轉至相關線程打點任務中進行深度分析。

查看核心線程在CPU Core的運行情況

  1. 展開“Launch”泳道,其中的“Running CPU Cores”子泳道展示啟動過程中的關鍵線程具體運行在哪個CPU核心。
  2. 單擊單個進程色塊,或框選多個進程,下方的“Details”區域展示所選對象的運行情況統計信息。

    單擊對應CPU的跳轉按鈕,可進一步跳轉到CPU Core泳道查看詳細的調度信息。

查看啟動過程相關的線程Trace數據

  1. 展開“Launch”泳道,除“Static Initialization”、“Running CPU Cores”外,還包含啟動過程的關鍵線程的狀態和Trace數據。
  2. 單擊單個切片色塊,或框選多個切片,可查看所選對象的詳情。

    • “Details”區域對所選對象進行樹狀統計,顯示任務的名稱、起始時間以及耗時信息。
    • “Thread States”區域展示線程的狀態統計信息。
    • “Thread Usage”區域展示線程的使用情況。
    • “Slice List”區域展示所選對象的切片統計信息。
    • “Load Statistics”區域展示所選對象的中載重載信息。

官網鏈接??官方學習班級

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94307.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

告別盲目排查,PolarDB+DAS Agent智能運維新突破

1.概述 周五下午6點正準備下班,數據庫CPU突然爆滿,業務告警響成一片,DBA卻要手動翻查CPU/內存/負載等多個監控指標,還要查詢是否有新增慢SQL,死鎖等問題?” 這可能是數據庫DBA最鬧心的場景了,…

Linux------《零基礎到聯網:CentOS 7 在 VMware Workstation 中的全流程安裝與 NAT 網絡配置實戰》

(一)Linux的發行版Centos安裝與配置 下載Linux發行版本Centos:centos-7-isos-x86_64安裝包下載_開源鏡像站-阿里云點擊CentOS-7-x86_64-DVD-2009.torrent ,CentOS-7-x86_64-DVD-2009.torrent是官方提供的 BT 種子文件(176.1 KB&a…

iOS App 混淆工具實戰,教育培訓類 App 的安全保護方案

隨著在線教育、企業培訓、知識付費平臺的興起,越來越多的 iOS 應用需要保護自己的課程資源和核心邏輯。然而,教育類 App 面臨的最大風險并非傳統的外掛或刷分,而是 視頻盜鏈、題庫數據泄露、源碼邏輯被二次利用。 在這種場景下,合…

RabbitMQ:SpringAMQP Topic Exchange(主題交換機)

目錄一、案例需求二、基礎配置三、代碼實現TopicExchange與DirectExchange類似,區別在于RoutingKey可以是多個單次的列表,并且以.分割。 Queue與Exchange指定BindingKey時可以使用通配符: #:代指0個或多個單詞。*:代…

(純新手教學)計算機視覺(opencv)實戰六——圖像形態學(腐蝕、膨脹、開運算、閉運算、梯度、頂帽、黑帽)

圖像形態學在圖像處理中,形態學(Morphology) 是一種基于圖像中物體形狀的處理方法,通常用于二值圖像和灰度圖像。它通過腐蝕、膨脹等基本操作,結合開運算、閉運算、梯度運算、頂帽、黑帽等派生操作,來實現去…

學習嵌入式第三十五天

文章目錄網絡(續上)1.函數接口2.相關功能實現1.TCP連接2.UDP習題網絡(續上) 1.函數接口 sendto 原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, sockle…

為什么給數據表加了索引,寫入速度反而變慢了

為數據表增加索引后之所以會導致寫入(包括插入、更新、刪除)操作的速度變慢,其根本原因在于索引本質上是一個獨立的、需要與主表數據保持實時同步的“數據結構”。這一機制的核心邏輯涵蓋五個方面:因為索引本質上是一個“獨立的數…

.NET Core 中采用獨立數據庫的SAAS(多租戶)方法

介紹多租戶是指一種軟件架構,其中軟件的單個實例在服務器上運行并為多個租戶提供服務。在基于 SAAS 的平臺中,租戶是指使用該平臺開展業務運營的客戶。每個租戶都擁有獨立的數據、用戶帳戶和配置設置,并且與其他租戶隔離。多租戶允許有效利用…

運維日常工作100條

這是一份非常詳細和實用的“運維日常工作100條”清單。它涵蓋了從日常巡檢、變更管理、故障處理到安全、優化和文檔等運維工作的方方面面,可以作為運維工程師的日常工作指南和檢查清單。 運維日常工作100條 一、日常巡檢與監控 (20條) 檢查核心監控大盤:查看整體業務健康狀態…

OpenHarmony子系統介紹

OpenHarmony子系統OpenHarmony子系統1. AI業務子系統2. 方舟運行時子系統3. ArkUI框架子系統4. DFX子系統5. DeviceProfile子系統6. XTS子系統7. 上傳下載子系統8. 主題框架子系統9. 事件通知子系統10. 位置服務子系統11. 元能力子系統12. 全局資源調度子系統13. 全球化子系統1…

博士招生 | 英國謝菲爾德大學 招收計算機博士

內容源自“圖靈學術博研社”gongzhonghao學校簡介謝菲爾德大學(The University of Sheffield)是英國久負盛名的公立研究型大學,也是羅素集團成員之一。在 2026 年 QS 世界大學排名中,謝菲爾德大學位列第92位,其中計算機…

如何理解面向過程和面向對象,舉例說明一下?

面向過程和面向對象是兩種不同的編程思想,核心區別在于解決問題的視角不同:前者關注 “步驟和過程”,后者關注 “對象和交互”。面向過程的核心思想是把問題拆解成一系列步驟,通過函數實現每個步驟,然后按順序調用這些…

深入了解評估與微調中使用的Graders:原理、實現與最佳實踐

深入了解評估與微調中使用的Graders 在模型評估與微調(Fine-tuning)過程中,Graders(評分器)是衡量模型輸出與參考答案之間表現的重要工具。本文將系統介紹Grader的類型、技術實現及如何在實際項目中融入穩定且高質量的…

行緩存(line buffer)在圖像卷積中的工作方式

上面這張圖配合文字,展示了行緩存(line buffer)在圖像卷積中的工作方式:上半部分是一個按行掃描輸入的圖像塊(示例為 99,編號 1–81)。 藍色表示已被寫入行緩存并按隊列等待的數據,綠…

【數據分享】中國371個城市的坡度矢量數據和excel數據

今天要說明數據就是中國371個城市的坡度矢量數據和excel數據。數據介紹在城市發展的進程中,地形地貌始終是影響規劃決策的關鍵因素,而坡度作為表征地表傾斜程度的核心指標,更是貫穿于城市建設、生態保護等諸多環節。本文將全面解讀中國 371 個…

《WINDOWS 環境下32位匯編語言程序設計》第7章 圖形操作(1)

圖形設備接口GDI(Graphics Device Interface)是Win32的一個重要組成部分,其作用是允許Windows的應用程序將圖形輸出到計算機屏幕、打印機或其他輸出設備上。GDI實際上是一個函數庫,包括直線、畫圖和字體處理等數百個函數。7.1 GDI…

數據結構-HashMap

在 Java 鍵值對(Key-Value)集合中,HashMap 是使用頻率最高的實現類之一,憑借高效的查找、插入性能,成為日常開發的 “利器”。本文將從 HashMap 的底層原理、核心特點、常用方法到遍歷方式、使用注意事項,進…

[系統架構設計師]安全架構設計理論與實踐(十八)

[系統架構設計師]安全架構設計理論與實踐(十八) 一.信息安全面臨的威脅 1.信息系統安全威脅的來源 物理環境,通信鏈路,網絡系統,操作系統,應用系統,管理系統 2.網絡與信息安全風險類別 風險類別…

AI適老服務暖人心:AI適老機頂盒破數字鴻溝、毫米波雷達護獨居安全,銀發生活新保障

銀發經濟領域長期受限于 “專業照護資源稀缺”“老年人數字適應能力弱”“獨居老人安全隱患多” 的困境,而 AI 技術的適老化改造,正讓銀發服務從 “被動保障” 轉向 “主動關懷”,既能幫老年人跨越數字鴻溝,又能為獨居老人筑起安全…

Linux應用軟件編程---網絡編程1(目的、網絡協議、網絡配置、UDP編程流程)

Linux下的網絡編程一、目的不同主機,進程間通信。二、解決的問題1. 主機與主機之間物理層面必須互聯互通。 2. 進程與進程在軟件層面必須互聯互通。物理層面的互聯互通流程圖如下:其中:IP地址:計算機的軟件地址,用來標…