週末閒來無事,翻遍各大視訊網站實在是找不到什麼好看節目。既然從娛樂的角度來說視訊不好看,那我們就來從技術的角度來看下各家視訊APP吧。技術的角度,話題還是太大,實在是沒有能力做一個全面的比較。記得曾經有位小夥伴曾說過,一切效能問題追究到底都會成為記憶體問題。那我們就從記憶體的角度來簡單分析下優酷、愛奇藝和騰訊視訊三家視訊APP。
一、基礎知識 - dumpsys命令
對於Debug版本APP我們可以使用Android Studio
自帶的Profiler
來檢視應用對記憶體的使用情況。想要檢視Release版本應用的記憶體使用情況就得靠dumpsys
這個工具了。dumpsys
執行在Android裝置上,我們可以通過adb命令來執行它。通過dumpsys
我們可以獲取到所有正在執行的系統服務的特徵資訊。系統服務非常多,我們可以通過如下命令檢視能夠使用dumpsys
來檢視服務特徵資訊的服務列表。
adb shell dumpsys -l
複製程式碼
上圖是我在華為P9上測試dumpsys -l
的截圖,服務列表很長,只擷取了一部分,截圖中看著眼熟的服務就activity
這個服務了,這個通常用來檢視四大元件的資訊,如常見的adb shell dumpsys activity activities
。常用還有如下服務。
服務名 | 作用 |
---|---|
input | 獲取系統輸入裝置的資訊,如鍵盤、觸控式螢幕等 |
batterystats | 獲取電量使用資訊 |
gfxinfo | 獲取UI渲染資訊 |
meminfo | 獲取記憶體使用資訊 |
cpuinfo | 獲取CPU使用資訊 |
netstats | 獲取網路使用資訊 |
1.1 dumpsys命令語法
dumpsys
命令的語法也非常簡單,直接adb shell dumpsys
即可。但這樣獲取的是所有服務的資訊,資訊非常多,想要過濾到我們所關注的資訊,還需要在命令後跟上我們所關注的服務名。如今天我們主要關注記憶體,對應的服務名是meminfo
,那麼命令就是adb shell dumpsys meminfo
。這個命令獲取的是裝置上所有程式的記憶體使用情況,我們今天關注的是優愛騰三個APP的記憶體,所以我們還得再命令後加上程式名來過濾adb shell dumpsys meminfo com.youku.phone
1.2 dumpsys輸出資訊解析
如上所示記憶體資訊,一般關注Pss Total
和 Private Dirty
這兩列。這是兩種不同的記憶體統計方式。
Private (Clean and Dirty) RAM
私有記憶體,這種方式只統計了當前程式獨享的記憶體,Private Clean
和Private Dirty
的總和就是當前程式的獨佔記憶體,當程式銷燬時系統會回收這部分記憶體。Dirty RAM
是必須儲存在記憶體中資料,如程式執行過程中的變數資料,這部分記憶體中的東西未成為垃圾資料之前必須一直儲存在記憶體中;Clean RAM
是從持久化檔案中載入的資料,如程式執行時載入的程式碼,這部分記憶體中的資料可以丟掉,再次使用時可以從持久化檔案中重新載入。
Proportional Set Size (PSS) 比例集大小,這種方式統計的記憶體除了程式獨享記憶體外,還包括通過共享頁面與其他程式共享的記憶體。共享記憶體的一個常見用途是在程式之間共享“程式碼”記憶體頁(載入只讀可執行程式碼的記憶體區域)。比如外部庫和JVM的可執行程式碼是存放在可以跨程式安全共享的記憶體區域。共享記憶體會根據共享程式數量分攤到各個程式中。
另外值得一提的是Objects
區域列出來的是當前程式存活的物件數量,這些資訊對分析記憶體洩露問題也有指導意義。例如ViewRootImpl
代表了當前程式存活的根view個數,ViewRootImpl
是和window
一一對應的,從ViewRootImpl
的數量我們也可以分析是否有dialog或者其他視窗導致的記憶體洩露。
二、優愛騰記憶體對比
APP | 包名 | 版本 |
---|---|---|
優酷 | com.youku.phone | 7.6.7 |
愛奇藝 | com.qiyi.video | 10.2.0 |
騰訊視訊 | com.tencent.qqlive | 6.8.0 |
上面是測試使用的APP版本。為了對比應用自己申請的記憶體大小,我們列出來Private Dirty
、Private Clean
及其他們的和Private Total
。驗證了以下三個場景:
- 開啟APP進入首頁不做任何操作穩定30s後測量記憶體資料;
- 在首頁往下滑動10屏以上穩定後測量記憶體資料;
- 退出應用殺掉程式,重新進入首頁,搜尋《人民的名義》點選01集進入播放頁,關閉彈幕全屏播放高清資源一分鐘後測量記憶體資料; 測量資料如下,單位都是KB。
上面是三家APP不同場景記憶體對比圖,實現同樣的功能記憶體耗用越低越好。可以看出,優酷在首頁上記憶體的使用是最為高效,愛奇藝的播放器在記憶體使用方面做得最好。還有一點就是愛奇藝在每個階段Private Clean
使用都是最小的。