Android研發:剛進公司就把“屎山”優化了是什麼體驗? 大佬降臨

剛進公司就把祖傳代碼優化了,讓公司的APP穩定性提高一半,大幅提升了用戶體驗是什麼體驗?

一個字!爽!

大佬降臨

去年金三銀四幫公司面試的時候認識了一個挺有意思的朋友,他是專科學歷,非科班出身的Android程序員。

他來了三個月後,對我們公司的那堆歷史代碼做了一波優化,將整體 OOM 與卡頓問題降低了77%,讓公司的APP穩定性數據提高 50%,大幅提升了用戶體驗,一鳴驚人。

其實此前我司並不是沒有嘗試做過性能優化,只不過用的都是市面上比較常見的方案。

對於內存優化:

  1. 我們使用了 LeakCanary來在開發階段發現內存泄露;
  2. 對於大家提交的代碼,我們有一套靜態檢測機制,來發現一些常見的內存泄露的 case,例如 Cursor 沒關閉,io 沒關閉等等;
  3. 我們還有一些Code Review 機制,來發現常見的一些內存泄露,例如單例持有了 Activity對象,以及一些內存抖動的 case,比如在 onDraw 裏面頻繁的創建對象;

相信這些也是大多數同學現在所處項目所實施的方案,那爲什麼做了這麼多,線上的性能問題還是一塌糊塗呢?

因爲我們僅僅處理了“明面”上的問題。

爲什麼這麼說呢?

對於內存,想要徹底的瞭解它,僅依賴一些寫代碼時的指導建議、以及 LeakCanary 去發現頁面相關泄露是不足夠的。

例如很多單例對象持有大量內存,例如:一些同學爲了做頁面打開速度,瘋狂做數據緩存;一堆 Bitmap 留在內存中常駐。

想要了解全貌,該怎麼做呢?

分析用戶運行之後的內存快照。

大多數同學可能會說,我們也有分析內存的,比如我會在 Android Studio 的 Profiler 中對內存情況進行分析,以及我還會利用 MAT 去詳細的查看內存。

這種分析確實能發現當時所處機器在特定路徑上的內存問題。

但是,線上用戶不同:

線上用戶機器硬件配置多變,其實最主要的是線上用戶的用戶行爲、操作路徑,我們很難完全知道,等到用戶 OOM 之後,報上來的堆棧,僅僅是最後申請內存達到閾值的崩潰,實際上根本的原因可能根本不在那最後一次內存申請。

如下圖:

錯誤發生在 b.xf 第五行,導致OOM的原因,到底是此處申請了太大的內存,還是其他地方申請了太多內存導致可用內存不足亦或者程序存在內存抖動問題,導致連續內存不足,我們不得而知。

所以,我們需要線上內存監控。

對於卡頓:

我們也經常收到用戶說,app 卡死了,研發對於「卡死」第一反應是不是 ANR 了?

其實用戶可能只是說頁面不流暢而已。

當然不管是不流暢、還是 ANR,對於客戶端同學來說,都是比較難解的問題。

難解在於兩點:

  1. 不知道用戶的行爲路徑,ANR 還好,可能還會上報一些 ANR_INFO,不流暢可能什麼信息都沒有,只能看看用戶的機型是不是低端機,然後問下用戶的操作路徑。
  2. 沒有線上卡頓檢測埋點,一般開發時我們用的都是高端機,很多卡頓是感知不出來的,而且線上我們 debug環境下打印的一些埋點信息對於線上完全起不到作用。

所以,我們需要線上卡頓監控。

那麼如何進行線上的性能監控呢?

在這裏我也分享一份收錄整理的Android性能優化系列資料

如果你有需要的話,可以前往GitHub自行領取

這個機會希望想補習線上性能監控提高APP調優內功,跳槽進大廠的朋友好好把握,抓緊時間提升!

除此之外,在這裏我還分享一份收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料

這些都是我現在閒暇時還會反覆翻閱的精品資料。裏面對近幾年的大廠面試高頻知識點都有詳細的講解。相信可以有效地幫助大家掌握知識、理解原理,幫助大家在面試季取到一份不錯的答卷。

當然,你也可以拿去查漏補缺,提升自身的競爭力。

如果你有需要的話,可以前往GitHub自行領取

喜歡本文的話,不妨順手給我點個贊、評論區留言或者轉發支持一下唄~

我相信,只要大家認真學習完這套體系化資料,你就有勇氣在簡歷上寫下熟悉Android線上性能監控,精通APP性能調優與項目實戰這些點。從此吊打所有向你提問線上性能監控的面試官,成爲一個名副其實的麪霸!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章