周末閑來無事,翻遍各大視頻網站實在是找不到什么好看節(jié)目。既然從娛樂的角度來說視頻不好看,那我們就來從技術的角度來看下各家視頻APP吧。技術的角度,話題還是太大,實在是沒有能力做一個全面的比較。記得曾經有位小伙伴曾說過,一切性能問題追究到底都會成為內存問題。那我們就從內存的角度來簡單分析下優(yōu)酷、愛奇藝和騰訊視頻三家視頻APP。

一、基礎知識 - dumpsys命令
對于Debug版本APP我們可以使用Android Studio自帶的Profiler來查看應用對內存的使用情況。想要查看Release版本應用的內存使用情況就得靠dumpsys這個工具了。dumpsys運行在Android設備上,我們可以通過adb命令來運行它。通過dumpsys我們可以獲取到所有正在運行的系統(tǒng)服務的特征信息。系統(tǒng)服務非常多,我們可以通過如下命令查看能夠使用dumpsys來查看服務特征信息的服務列表。
adb shell dumpsys -l

上圖是我在華為P9上測試
dumpsys -l的截圖,服務列表很長,只截取了一部分,截圖中看著眼熟的服務就activity這個服務了,這個通常用來查看四大組件的信息,如常見的adb shell dumpsys activity activities。常用還有如下服務。
| 服務名 | 作用 |
|---|---|
| input | 獲取系統(tǒng)輸入設備的信息,如鍵盤、觸摸屏等 |
| batterystats | 獲取電量使用信息 |
| gfxinfo | 獲取UI渲染信息 |
| meminfo | 獲取內存使用信息 |
| cpuinfo | 獲取CPU使用信息 |
| netstats | 獲取網絡使用信息 |
1.1 dumpsys命令語法
dumpsys命令的語法也非常簡單,直接adb shell dumpsys即可。但這樣獲取的是所有服務的信息,信息非常多,想要過濾到我們所關注的信息,還需要在命令后跟上我們所關注的服務名。如今天我們主要關注內存,對應的服務名是meminfo,那么命令就是adb shell dumpsys meminfo。這個命令獲取的是設備上所有進程的內存使用情況,我們今天關注的是優(yōu)愛騰三個APP的內存,所以我們還得再命令后加上進程名來過濾adb shell dumpsys meminfo com.youku.phone

1.2 dumpsys輸出信息解析
如上所示內存信息,一般關注Pss Total 和 Private Dirty這兩列。這是兩種不同的內存統(tǒng)計方式。
Private (Clean and Dirty) RAM
私有內存,這種方式只統(tǒng)計了當前進程獨享的內存,Private Clean和Private Dirty的總和就是當前進程的獨占內存,當進程銷毀時系統(tǒng)會回收這部分內存。Dirty RAM是必須保存在內存中數據,如程序運行過程中的變量數據,這部分內存中的東西未成為垃圾數據之前必須一直保存在內存中;Clean RAM是從持久化文件中加載的數據,如程序執(zhí)行時加載的代碼,這部分內存中的數據可以丟掉,再次使用時可以再從持久化文件中再次加載。
Proportional Set Size (PSS)
比例集大小,這中方式統(tǒng)計的內存除了進程獨享內存外,還包括通過共享頁面與其他進程共享的內存。共享內存的一個常見用途是在進程之間共享“代碼”內存頁(加載只讀可執(zhí)行代碼的內存區(qū)域)。比如外部庫和JVM的可執(zhí)行代碼是存放在可以跨進程安全共享的內存區(qū)域。共享內存會根據共享進程數量分攤到各個進程中。
另外值得一提的是Objects區(qū)域列出來的是當前進程存活的對象數量,這些信息對分析內存泄露問題也有指導意義。例如ViewRootImpl代表了當前進程存活的根view個數,ViewRootImpl是和window一一對應的,從ViewRootImpl的數量我們也可以分析是否有dialog或者其他窗口導致的內存泄露。
二、優(yōu)愛騰內存對比
| APP | 包名 | 版本 |
|---|---|---|
| 優(yōu)酷 | 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進入首頁不做任何操作穩(wěn)定30s后測量內存數據;
- 在首頁往下滑動10屏以上穩(wěn)定后測量內存數據;
-
退出應用殺掉進程,重新進入首頁,搜索《人民的名義》點擊01集進入播放頁,關閉彈幕全屏播放高清資源一分鐘后測量內存數據;
測量數據如下,單位都是KB。
優(yōu)愛騰內存對比
內存對比圖
上面是三家APP不同場景內存對比圖,實現同樣的功能內存耗用越低越好??梢钥闯?,優(yōu)酷在首頁上內存的使用是最為高效,愛奇藝的播放器在內存使用方面做得最好。還有一點就是愛奇藝在每個階段Private Clean使用都是最小的。

