QPM 之懸浮窗助力效能優化

gdky005發表於2019-01-03

QPM 開源地址:github.com/ZhuoKeTeam/…

讓我們來嘗試做一些可以視覺化的懸浮窗功能吧,裡面可以展示一些基礎的效能指標資料。

啟動 App 後便可以看到一些資料,解決未 root 手機無法獲取資料的疑難雜症。

image

包名

一個 apk 會有一個固定的包名,但是在某些特殊場景下,卻會展示多個包名,例如:測試包,正式包,變種包,推送測試包等等,給 QPM 展示當前應用的包名,在某些時候可以方便我們定位問題。舉個例子:我們之前一直在測試推送包,有時候需要切換到正式包,在兩個包中切換各種RD,ST環境,最後我都不記得我用的什麼包,只能解除安裝了,重新安裝。QPM 的懸浮窗可以直接展示當前應用的包名,看一眼就知道了,其實也可以把當前程式+執行緒號列印出來,方便開發同學分析問題。

當前 Activity 的名字

試想,做了5年的專案,交給新來你接手?或者同事離職,丟下一堆坑,需要你來填坑。根據程式碼梳理流程後,也不一定能立刻接手,如果根據頁面找Activity,一個字————累!

如果能直接展示當前介面的 Activity 名字,是不是更容易一些呢?

CPU 和 記憶體

介面怎麼這麼卡啊,快優化下。懵逼的你可能會想這要從哪裡入手?先從介面渲染,還是從業務角度? 關鍵是我們需要知道在頁面的什麼場景下會出現問題,有一個直觀指標就容易判斷了。當 CPU 到達 200% 的時候,記憶體劇增,那肯定有問題,可以用效能工具對該頁面詳細的分析。 一般先看看在該介面的 CPU 和 記憶體是否異常,再結合業務邏輯把相關的資料提前或者延遲獲取,減少同一時刻併發獲取,從而減少主介面卡頓。

執行緒數

這是什麼鬼?還記得曾經的老大說要複用執行緒,別單獨搞麼。如果你發現 200 多個執行緒,那你就得考慮下是否需要執行緒池了。這裡可以依據現有邏輯來處理,並非絕對性的。

Activity 堆疊

還記得剛學 Activity 那會兒麼,Activity的 四種 LaunchMode,這裡可以記錄一個棧裡面的 Activity 的順序。方便你直觀瞭解棧中的情況。

流量

我們 App 的請求用了多少流量? 可能在 3G/4G 關注點比較多,雖然現在絕多數都是 WIFI,但是我們的使用者在一定環境下會使用 3G/4G, 所以還是又必須關注下。

網路情況如何? 比方說我用的是 Wifi, 在某些角落網速很差,甚至沒流量資料,我們都希望可以瞭解。

在某個時刻,頁面是空白的?為什麼沒有資料呢,可以看看嘗試看看下載速度。

尤其對現在約來越多的某些小視訊,大家可能會關心大約用了多少流量。

螢幕錄製

基於 Android 5.0 的 API,錄製整個螢幕,方便大家復現某些關於操作記錄的問題。

監控 H5 頁面

需要配合相應的設定,我們就可以在 WebView 中對任何一個網頁進行非同步檢測,例如獲取當前頁面地址,首頁白屏載入時間,以及每個資源的請求時間,和請求資源地址。非常容易。

自定義的五種對外樣式

以下的一個唯一標識,表示一個 item, 如果要新增多個,可以把唯一標示設定為不同的。

  • 大檔案框樣式

QPMManager.getInstance().showBigText(flag, bigText); 第一個引數 flag 是唯一標示, 第二個 bigText 是自定義懸浮窗中顯示的所有文字資料。

  • 鍵值對文字樣式

QPMManager.getInstance().showKeyValue(flag, key, value); 第一個引數 flag 是唯一標示, 第二個 key 是自定義懸浮窗中顯示的 key 值,第三個是 懸浮窗中的 value 值。

  • 鍵圖樣式

QPMManager.getInstance().showKeyPic(flag, key, picRes); 第一個引數 flag 是唯一標示, 第二個 key 是自定義懸浮窗中顯示的 key 值,第三個是 懸浮窗中的 pic Res 中的資源值。

  • 圖值樣式

QPMManager.getInstance().showPicValue(flag, picId, value); 第一個引數 flag 是唯一標示, 第二個 key 是自定義懸浮窗中顯示的 key 值,第三個是 懸浮窗中的 pic Res 中的資源值 (可以放到你們的主 App 中)。

  • 自定義樣式

QPMManager.getInstance().showCustom(flag,QPMTemplateCustomRenderer); 第一個引數 flag 是唯一標示, 第二個 QPMTemplateCustomRenderer 是自定義懸浮窗中你們要自己新增的佈局,可以寫一個類,繼承自QPMTemplateCustomRenderer,實現裡面的方法,懸浮窗上就可以顯示對應的內容。

相關文章