1. 程式人生 > >Android 效能優化 冷啟動速度優化

Android 效能優化 冷啟動速度優化

前言

本篇文章對app啟動速度進行優化。先了解 Android 效能優化 基本概念應用是如何啟動的,會對此有幫助。

1. 應用的啟動模式

  • 冷啟動 Cold start
    當啟動應用時,後臺沒有該應用的程序,這時系統會重新建立一個新的程序分配給該應用,這個啟動方式就是冷啟動。
    冷啟動因為系統會重新建立一個新的程序分配給它,所以會先建立和初始化Application類,再建立和初始化MainActivity類(包括一系列的測量、佈局、繪製),最後顯示在介面上。
    此時會初始化Application,Application沒有初始化完不會向下走。

  • 熱啟動Warm start
    當啟動應用時,後臺已有該應用的程序(例:按back鍵、home鍵,應用雖然會退出,但是該應用的程序是依然會保留在後臺,可進入任務列表檢視),所以在已有程序的情況下,這種啟動會從已有的程序中來啟動應用,這個方式叫熱啟動。
    熱啟動因為會從已有的程序中來啟動,所以熱啟動就不會走Application這步了,而是直接走LauncherActivity(包括一系列的測量、佈局、繪製),所以熱啟動的過程只需要建立和初始化一個MainActivity就行了,而不必建立和初始化Application,因為一個應用從新程序的建立到程序的銷燬,Application只會初始化一次。

  • 溫啟動Lukewarm start
    A lukewarm start encompasses some subset of the operations that take place during a cold start; at the same time, it represents less overhead than a warm start. 
    溫啟動包括在冷啟動期間發生的操作的一些子集;同時,它表示比熱啟動少的開銷。有許多潛在的狀態可以被認為是溫暖的開始。

  • Although, application launching is blazingly fast, Android still require some time to load some data from your application (classes, resources, etc). In order to avoid hiccups and visually respond as soon as possible to the user interaction, the system displays a temporary window: the “starting window” also known as the “preview window”.


    *A common way to implement a themed launch screen is to use the windowDisablePreview
     theme attribute to turn off the initial blank screen that the system process draws when launching the app. However, this approach can result in a longer startup time than apps that don’t suppress the preview window. Also, it forces the user to wait with no feedback while the activity launches, making them wonder if the app is functioning properly.*
    在Launcher上點選應用啟動時會展示一個preview window
    ,一般根據Theme為黑色或白色,也可以在Theme中設定屬性windowDisablePreview為true來禁止顯示該preview window,但這樣會讓使用者困惑,到底我點了沒有??

在使用中大多數應用都有一個SplashActivity來形成視覺連貫性。這裡就不贅述了。可檢視 帶你重新認識:Android Splash頁秒開 Activity白屏 Activity黑屏。所以下面的優化也都是建立在已經使用了SplashActivity後依然停留過長時間。

2. 應用啟動時間測量

2.1 測量啟動時間

使用命令adb shell am start -W [packageName]/[packageName.MainActivity]可以檢視冷、熱啟動時間。

  • WaitTime 就是總的耗時,包括前一個應用 Activity pause 的時間和新應用啟動的時間;
  • ThisTime 表示一連串啟動 Activity 的最後一個 Activity 的啟動耗時;
  • TotalTime 表示新應用啟動的耗時,包括新程序的啟動和 Activity 的啟動,但不包括前

做啟動優化時主要優化冷啟動,儘量使冷啟動佔用的時間變少,其中冷啟動包括如下幾個步驟:
1. Creating the app object.
2. Launching the main thread.
3. Creating the main activity.
4. Inflating views.
5. Laying out the screen.
6. Performing the initial draw.

所以要儘量保證在Application和LauncherActivity中儘量少操作,儘量不耗時。

2.2 測量Activity啟動時間

No Filters模式下搜尋關鍵詞Displayed便可以檢視,如下所示:
ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms

2.3 使用TraceView精確測量

在Application程式碼中,新增如下程式碼進行精確測量:

// start tracing to "/sdcard/calc.trace"
Debug.startMethodTracing("calc");
// ...
// stop tracing
Debug.stopMethodTracing();

在DDMS中開啟檔案後,可以精確檢視每一個方法的消耗時間,按照Real Time/Call排序,然後進行優化。

2.4 可以優化之處

知道了啟動流程,我們也主要優化這個流程中我們能優化的地方:Application.attachBaseContext()Application.onCreate()LauncherActivity.onCreate()中進行的操作和佈局複雜度。

知道了如何測量時間,便提供了一個標準,我們就在優化時有個標準,當然時間越少越好。

3. 如何優化

  • 在Application和LauncherActivity中打印出.trace檔案,分析耗時操作。
  • 業務允許時將耗時操作放入子執行緒中初始化。

結語

啟動速度的優化有可依循的步驟,方法很多,參考資料中有可以用多程序去優化,慢慢來吧,不斷學習。

相關推薦

Android 效能優化 啟動速度優化

前言 本篇文章對app啟動速度進行優化。先了解 Android 效能優化 基本概念應用是如何啟動的,會對此有幫助。 1. 應用的啟動模式 冷啟動 Cold start 當啟動應用時,後臺沒有該應用的程序,這時系統會重新建立一個新的程序分配給該應用,

Android效能分析——Activity啟動速度分析工具

Android頁面基本是由大量Activity承載,流暢的頁面啟動速度代表著高使用者體驗 眾所周知,除卻底層的IPC呼叫等,就應用開發者層面而言,Activity啟動速度主要由三部分構成:佈局(layout),繪製(draw),業務(biz),針對此處,筆者開

支付寶客戶端架構解析:Android 客戶端啟動速度優化之「垃圾回收」

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 本節將介紹支付寶 Andro

Android 8.0 啟動速度優化工具

在Android 8.0上面,google進行了啟動速度的優化,但是對於開發者來說,追求更快的速度是必須的。 這邊就介紹一個android啟動速度優化的工具,bootchart。 bootchart在5.0的時候就以推出,但是現在的使用方式有了一些調整,下面就簡

AndroidAPP啟動速度優化解析;啟動和熱啟動

啟動方式 通常來說,在安卓中應用的啟動方式分為兩種:冷啟動和熱啟動。 1、冷啟動:當啟動應用時。後臺沒有該應用的程序,這時系統會又一次建立一個新的程序分配給該應用,這個啟動方式就是冷啟動。 2、熱啟動:當啟動應用時,後臺已有該應用的程序(例:按back鍵、home鍵,應用盡管會

Android啟動時間優化檢視及啟動時間優化優化

測量Activity 的啟動時間 如何獲得app的啟動時間? 我也在想這個問題。 當我在framework 程式碼上做這類測量的時候,我可以精確的得出我需要的東西。但是非framework 開發者如何從普通構建獲得自己需要的資訊呢? 一 、直接看log 幸運的是,這

愛奇藝技術分享:愛奇藝Android客戶端啟動速度優化實踐總結

本文由愛奇藝技術團隊原創分享,原題《愛奇藝Android客戶端啟動優化與分析》。 1、引言 網際網路領域裡有個八秒定律,如果網頁開啟時間超過8秒,便會有超過70%的使用者放棄等待,對Android APP而言,要求更加嚴格,如果系統無響應時間超過5秒,便會出現ANR,APP可能會被強制關閉,

Android面試系列啟動優化

什麼是冷啟動? 冷啟動的定義 冷啟動就是在啟動應用前,系統中沒有該應用的任何程序資訊時候的啟動(第一次開啟應用,或者殺死了這個app程序後的啟動) 冷啟動/熱啟動的區別 熱啟動定義:使用者使用app返回鍵退出應用,然後馬上又重新啟動應用。 區別一:ap

Android啟動速度優化

最近做了一些Android App啟動速度的優化,有一些心得,整理整理 影響啟動速度的原因 高耗時任務 資料庫初始化、某些第三方框架初始化、大檔案讀取、MultiDex載入等,導致CPU阻塞 複雜的View層級 使用的巢狀Layout過

提升HTML5的性能體驗系列之五 webview啟動速度優化及事件順序解析

執行時間 很快 runt 代碼 模式 本地 技術 apk loaded webview加載時有5個事件。觸發順序為loading、titleUpdate、rendering、rendered、loaded。webview開始載入頁面時觸發loading,載入過程中如果&am

Entity Framework的啟動速度優化

映射 自帶 1-1 man 同時 找到 優化 http target 剛開始的時候沒有太在意,但是隨著系統的發布,這種初次請求,或者閑置若幹時間後第一次請求的漫長等待使得App的體驗很差,很多時候App加載好半天數據都沒過來。如果前端沒處理好,還會導致App的假死。所以就花

iOS端啟動速度優化

應用啟動流程 iOS應用的啟動可分為pre-main階段和main()階段,其中系統做的事情依次是: 1. pre-main階段 1.1. 載入應用的可執行檔案 1.2. 載入動態連結庫載入器dyld(dynamic loader) 1.3. dyld遞迴載入應用所有依賴的dy

apk瘦身以及啟動速度優化

一、apk瘦身 1、minifyEnabled true,可以幫助移除那些在程式中使用不到的程式碼。 如下圖: 2、shrinkResources true移除那些在程式中使用不到的資源,幫助減少APP的安裝包大小。   二、apk啟動速度優化: 在app

一號店簽名爆破&應用啟動速度優化方案X2C&修改系統類載入器&另類啟動元件方式

一、前言 今天的套路和之前不同,因為最近看到了一些零散的知識,我不想一些簡單的知識單獨寫一篇文章,因為我想要的是每篇文章都能讓你們看很長時間,這樣我一週發一篇才算合理,所以本文就把四個零碎的不太熟知的知識點介紹一下吧: 第一、如何將一號店應用簽名爆破 第二、應用啟動速度

Android O 安卓啟動時間優化分析

文件轉載自AOSP官網 本文件提供了有關改進特定 Android 裝置的啟動時間的合作伙伴指南。啟動時間是系統性能的重要組成部分,因為使用者必須等待啟動完成後才能使用裝置。對於較常進行冷啟動的汽車等裝置而言,較短的啟動時間至關重要(沒有人喜歡在等待幾十秒後才能輸

Android4.0開機啟動速度優化過程經驗總結

      筆者EDE101使用的平臺是:A10+android4.0.4+16GB NAND+1G DDR+(1280 X RGB X 800)。專案進入收尾階段,需要著重解決一下開機速度的問題,客戶反映還是太慢了一點,當然我們得列入高優先順序重點攻關解決了。優化開機速度前,平均android啟動速度大概在

App啟動速度優化

應用啟動流程 iOS應用的啟動可分為pre-main階段和main()階段,其中系統做的事情依次是: pre-main階段 1.1. 載入應用的可執行檔案 1.2. 載入動態連結庫載入器dyld(dynamic loader) 1.3. dyld遞迴載入應用所有依

今日頭條iOS客戶端啟動速度優化

應用啟動時間,直接影響使用者對一款應用的判斷和使用體驗。頭條主app本身就包含非常多並且複雜度高的業務模組(如新聞、視訊等),也接入了很多第三方的外掛,這勢必會拖慢應用的啟動時間,本著精益求精的態度和對使用者體驗的追求,我們希望在業務擴張的同時最大程度的優化啟動時間。 技術調研 先說結論,t(App總

zynq QSPI啟動速度優化

   發現zynq從QSPI啟動時速度很慢。更改uboot的zynq_common.h "qspiboot=echo Copying Linux from QSPI flash to RAM... && " \ "sf probe 0 50000000

6.調優實戰-優化idea啟動速度

1.需要解決的問題 A.idea啟動時間很長,大於1分鐘; B.idea啟動非常佔用cpu,超過80%(電腦cpu比較舊); 2.準備工作 2.1 idea啟動初始配置 A.配置檔案 IntelliJ IDEA\bin\idea64.exe.vmoptions B