Android App優(yōu)化之提升你的App啟動速度之理論基礎

系列文:

  1. 背景:Android App優(yōu)化, 要怎么做?
  2. Android App優(yōu)化之性能分析工具
  3. Android App優(yōu)化之提升你的App啟動速度之理論基礎
  4. Android App優(yōu)化之提升你的App啟動速度之實例挑戰(zhàn)
  5. Android App優(yōu)化之Layout怎么擺
  6. Android App優(yōu)化之ANR詳解
  7. Android App優(yōu)化之消除卡頓
  8. Android App優(yōu)化之內存優(yōu)化
  9. Android App優(yōu)化之持久電量
  10. Android App優(yōu)化之如何高效網絡請求

1, 欲善其事, 先利其器

論語有云: 工欲善其事栋操,必先利其器. 要想提升App的啟動速度, 我們需要先找到拖后腿的點, 要想找到這些點, 我們就需要借助我們的工具了.

前文提到了很多工具, 今天我們使用Traceview來分析我們的啟動過程.

1.1 Traceview介紹

Traceview是一個性能分析工具, 主要是分析當前線程情況, 各個方法執(zhí)行時間等. 如下:

traceview

指標說明:

  • Incl(Inclusive) Cpu Time
    方法本身和其調用的所有子方法占用CPU時間.
  • Excl(Exclusive) Cpu Time
    方法本身占用CPU時間.
  • Incl Real Time
    方法(包含子方法)開始到結束用時.
  • Excl Real Time
    方法本身開始到結束用時.
  • Call + Recursion Calls/Total
    方法被調用次數(shù) + 方法被遞歸調用次數(shù).
  • Cpu Time/Call
    方法調用一次占用CPU時間.
  • Real Time/Call
    方法調用一次實際執(zhí)行時間.

一般來說, 我們使用Real Time/Call排序來找出耗時多的方法

有必要解釋下CPU Time和Real Time:
CPU Time 方法實際執(zhí)行時間(不包括io等待時間)
Real Time 方法開始結束時間差(包括等待時間)
參考:http://stackoverflow.com/questions/15760447/what-is-the-meaning-of-incl-cpu-time-excl-cpu-time-incl-real-cpu-time-excl-re/17902682#17902682

1.2 Traceview使用

有兩種方式來使用Traceview:
1, 通過DDMS:


start traceview

點擊開始時會彈出一個選擇trace模式的框, 默認選中"Sample based profiling"即可:

traceview option
  • Sample based profiling(基于樣本分析)
    根據(jù)采樣時間間隔來規(guī)律的打斷VM來記錄方法調用棧(Call Stack), 開銷和采樣頻率成比例.

  • Trace based profiling(基于完整trace數(shù)據(jù)分析)
    記錄每個方法的出入口, 每個方法執(zhí)行時都開啟記錄, 無論多小的方法, 因此開銷很大.

2, 使用代碼:

// 在自己想要開始調試的地方start
Debug.startMethodTracing("GithubApp");

// 在合適的地方stop
Debug.stopMethodTracing();

注: 以上方法開啟trace的方式相當于"Trace based profiling", 會記錄每個方法的執(zhí)行. Android 4.4及以上可以調用startMethodTracingSampling()來用代碼開啟"Sample based profiling"的trace方式.

2, App啟動流程分析

要想優(yōu)化App啟動流程, 必先了解其啟動過程.
具體過程請參看這篇譯文: Android Application啟動流程分析.

3, App啟動方式

通常來說, 一個App啟動也會分如下三中不同的狀態(tài):

  • 冷啟動
    App沒有啟動過或App進程被killed, 系統(tǒng)中不存在該App進程, 此時啟動App即為冷啟動.
    冷啟動的流程即為第2節(jié)所描述的App啟動流程的全過程, 需要創(chuàng)建App進程, 加載相關資源, 啟動Main Thread, 初始化首屏Activity等.

    在這個過程中, 屏幕會顯示一個空白的窗口(顏色基于主題), 直至首屏Activity完全啟動.

    下圖展示了冷啟動的時間線:


    code start
  • 熱啟動
    熱啟動意味著你的App進程只是處于后臺, 系統(tǒng)只是將其從后臺帶到前臺, 展示給用戶.

    類同與冷啟動, 在這個過程中, 屏幕會顯示一個空白的窗口(顏色基于主題), 直至activity渲染完畢.

  • 溫啟動
    介于冷啟動和熱啟動之間, 一般來說在以下兩種情況下發(fā)生:

    • 用戶back退出了App, 然后又啟動. App進程可能還在運行, 但是activity需要重建.
    • 用戶退出App后, 系統(tǒng)可能由于內存原因將App殺死, 進程和activity都需要重啟, 但是可以在onCreate中將被動殺死鎖保存的狀態(tài)(saved instance state)恢復.

通過三種啟動狀態(tài)的相關描述, 可以看出我們要做的啟動優(yōu)化其實就是針對冷啟動. 熱啟動和溫啟動都相對較快.

4, 哪些地方是App快速啟動的敵人

根據(jù)冷啟動的時間圖, 可以看出, 對于App來說, 我們可以控制的啟動時間線的點無外乎:

  • Application的onCreate
  • 首屏Activity的渲染

而我們現(xiàn)在的App動不動集成了很多第三方服務, 啟動時需要檢查廣告, 注冊狀態(tài)等等一系列接口都是在Application的onCreate或是首屏的onCreate中做的.

很多第三方平臺的SDK文檔也都是這么建議的.

5, 結語

明白了App的啟動原理, 也知道了App啟動過程中哪些地方容易阻塞, 還知道了用什么工具來分析每個方法的執(zhí)行時間, 那么接下來就很容易做了.

下一篇將完全以實例的方式來說明App啟動優(yōu)化該怎么分析, 怎么做.
請關注系列文~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市用僧,隨后出現(xiàn)的幾起案子壶栋,更是在濱河造成了極大的恐慌辰如,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贵试,死亡現(xiàn)場離奇詭異琉兜,居然都是意外死亡,警方通過查閱死者的電腦和手機毙玻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門豌蟋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桑滩,你說我怎么就攤上這事梧疲。” “怎么了运准?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵幌氮,是天一觀的道長。 經常有香客問我胁澳,道長该互,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任韭畸,我火速辦了婚禮宇智,結果婚禮上蔓搞,老公的妹妹穿的比我還像新娘。我一直安慰自己随橘,他們只是感情好败明,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著太防,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酸员。 梳的紋絲不亂的頭發(fā)上蜒车,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音幔嗦,去河邊找鬼酿愧。 笑死,一個胖子當著我的面吹牛邀泉,可吹牛的內容都是我干的嬉挡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼汇恤,長吁一口氣:“原來是場噩夢啊……” “哼庞钢!你這毒婦竟也來了?” 一聲冷哼從身側響起因谎,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤基括,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后财岔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體风皿,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年匠璧,在試婚紗的時候發(fā)現(xiàn)自己被綠了桐款。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡夷恍,死狀恐怖魔眨,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情酿雪,我是刑警寧澤冰沙,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站执虹,受9級特大地震影響拓挥,放射性物質發(fā)生泄漏。R本人自食惡果不足惜袋励,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一侥啤、第九天 我趴在偏房一處隱蔽的房頂上張望当叭。 院中可真熱鬧,春花似錦盖灸、人聲如沸蚁鳖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醉箕。三九已至,卻和暖如春徙垫,著一層夾襖步出監(jiān)牢的瞬間讥裤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工姻报, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留己英,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓吴旋,卻偏偏與公主長得像损肛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荣瑟,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容