自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

提升你的App啟動速度的那些理論基礎(chǔ)

移動開發(fā) Android
論語有云: 工欲善其事,必先利其器. 要想提升App的啟動速度, 我們需要先找到拖后腿的點, 要想找到這些點, 我們就需要借助我們的工具了。

1, 欲善其事, 先利其器

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

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

1.1 Traceview介紹

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

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

指標(biāo)說明:

Incl(Inclusive) Cpu Time

方法本身和其調(diào)用的所有子方法占用CPU時間.

Excl(Exclusive) Cpu Time

方法本身占用CPU時間。

Incl Real Time

方法(包含子方法)開始到結(jié)束用時。

Excl Real Time

方法本身開始到結(jié)束用時。

Call + Recursion Calls/Total

方法被調(diào)用次數(shù) + 方法被遞歸調(diào)用次數(shù)。

Cpu Time/Call

方法調(diào)用一次占用CPU時間。

Real Time/Call

方法調(diào)用一次實際執(zhí)行時間。

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

有必要解釋下CPU Time和Real Time:

  • CPU Time 方法實際執(zhí)行時間(不包括io等待時間)
  • Real Time 方法開始結(jié)束時間差(包括等待時間)

參考: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:

a, 通過DDMS:

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

點擊開始時會彈出一個選擇trace模式的框, 默認(rèn)選中”Sample based profiling”即可:

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

Sample based profiling(基于樣本分析)

根據(jù)采樣時間間隔來規(guī)律的打斷VM來記錄方法調(diào)用棧(Call Stack), 開銷和采樣頻率成比例。

Trace based profiling(基于完整trace數(shù)據(jù)分析)

記錄每個方法的出入口, 每個方法執(zhí)行時都開啟記錄, 無論多小的方法, 因此開銷很大。

b, 使用代碼:

  1. // 在自己想要開始調(diào)試的地方start 
  2. Debug.startMethodTracing("GithubApp"); 
  3. // 在合適的地方stop 
  4. Debug.stopMethodTracing(); 

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

2, App啟動流程分析

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

3, App啟動方式

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

冷啟動

  • App沒有啟動過或App進(jìn)程被killed, 系統(tǒng)中不存在該App進(jìn)程, 此時啟動App即為冷啟動。
  • 冷啟動的流程即為第2節(jié)所描述的App啟動流程的全過程, 需要創(chuàng)建App進(jìn)程, 加載相關(guān)資源, 啟動Main Thread, 初始化首屏Activity等。
  • 在這個過程中, 屏幕會顯示一個空白的窗口(顏色基于主題), 直至首屏Activity完全啟動。

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

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

熱啟動

  • 熱啟動意味著你的App進(jìn)程只是處于后臺, 系統(tǒng)只是將其從后臺帶到前臺, 展示給用戶。
  • 類同與冷啟動, 在這個過程中, 屏幕會顯示一個空白的窗口(顏色基于主題), 直至activity渲染完畢。

溫啟動

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

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

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

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

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

  • Application的onCreate
  • 首屏Activity的渲染

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

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

5, 結(jié)語

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

責(zé)任編輯:未麗燕 來源: 安卓巴士
相關(guān)推薦

2011-03-22 09:33:39

J-Hi

2011-08-01 14:24:42

數(shù)據(jù)加密加密

2017-07-18 10:20:30

Python神經(jīng)網(wǎng)絡(luò)

2017-03-13 14:45:51

Python神經(jīng)網(wǎng)絡(luò)基礎(chǔ)

2025-02-13 10:34:30

LLM算法PPO

2021-12-13 20:08:28

理論渲染技術(shù)

2022-07-10 14:59:57

機器學(xué)習(xí)人工智能預(yù)測模型

2012-05-04 09:10:50

多核CPUwindows

2009-09-04 11:34:31

NetBeans優(yōu)化

2021-09-13 11:32:45

回溯算法理論

2018-08-17 04:27:16

機器學(xué)習(xí)數(shù)學(xué)理論工程領(lǐng)域

2025-03-20 11:28:34

2025-03-19 10:00:56

2016-03-02 17:55:03

app用戶加載

2018-09-29 15:59:18

APPiOS優(yōu)化

2010-07-28 16:54:09

ADSL寬帶速度

2022-02-16 07:44:48

機器學(xué)習(xí)模型

2024-10-21 17:33:58

2019-12-23 11:02:12

HTTP請求頭網(wǎng)絡(luò)協(xié)議

2011-07-06 11:33:52

ADSLModem
點贊
收藏

51CTO技術(shù)棧公眾號