主頁 > 移動端開發 > 剛進公司就把祖上十八代單傳的代碼優化了是什么體驗?

剛進公司就把祖上十八代單傳的代碼優化了是什么體驗?

2021-04-22 11:18:36 移動端開發

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

一個字!爽!

這不比斗破里面蕭炎“三年之期”打臉嫣然來的爽?不比博人傳燃?爽文小說都不敢這么寫,

關鍵,沒人信啊,

扮豬吃老虎的大佬

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

進公司后,這個小伙子上手很快,來的第三個月,他對我們公司的那堆祖傳代碼做了一些小小的優化,讓公司的APP穩定性提高一半,大幅提升了用戶體驗,一鳴驚人,得到了領導的表揚還有我們技術組的一致好評,直接免考核轉正了,

平時不聲不響的,原來擱這兒憋大招呢,就說牛不牛掰!!!同批進來的其他人自然不服,覺得這就是靠運氣,他上他也行,

性能優化的地位

Android和iOS都用過的朋友應該體驗比較明顯:相比于iOS,Android用的時間越長就會越卡,

在這個網路都追求5G的時代,“卡”這個體驗顯然成為了一個極其拉低印象分的問題,

所以,在 Android開發中,性能優化策略十分重要,他決定了應用程式的開發質量,包括可用性、流暢性、穩定性等,是提高用戶留存率的關鍵,

所以,不只是阿里,還有騰訊、位元組跳動、愛奇藝等,都非常重視這個問題,在面試中,如果這個方向表現優異,你將會很值錢,這也是那個小伙子得以免考核轉正的主要原因,

其實我司的產品上線前不是沒有經過測驗,我們也會使用業界的主流工具,比如 Android Studio Profiler、LeakCanary、Memory Analyzer (MAT)、Systrace等工具進行檢測,但是這些工具會存在以下問題:

  • 線下場景能跑到的場景有限,很難把所有用戶場景窮盡,但是應用上線后常因為線下無法復現、用戶提供線索不足等原因不了了之;

  • Android 端的 記憶體快照HPORF 的獲取依賴原生的 Debug.dumpHporf,dump 程序會掛起主執行緒導致明顯卡頓,線下使用體驗較差,影響采樣資料,

  • 無論是Systrace還是LeakCanary 在使用時,都會導致程式“變卡”,分析程序也會影響行程記憶體占用,導致分析資料出現偏差,甚至影響其他的性能指標;

  • 記憶體分析工具分析結果較為單一,僅僅只能分析出 Fragment、Activity 記憶體泄露,像大物件、過多小物件問題導致的記憶體 OOM 無法分析,

性能問題如何治理?

正是由于上述一些弊端,使用這些線下工具只能解決一些明顯的、常見的問題,然而應用上線之后的環境是無比復雜的,

首先,搞客戶端開發的同學應該都知道,解決卡頓的程序往往是曲折的,有些并沒有我們想的那樣簡單、淺表,很多時候,大部分卡頓是很難及時發現的,不可重現的卡頓,經常出現在線上用戶的真實使用程序中,這種卡頓往往跟機器性能,手機環境,甚至是操作偏好等因素息息相關,

我們平時從用戶反饋的“好卡呀”這種描述中很難直接洞察到卡頓的根源,甚至有些連卡頓的場景都不知道,很難準確重現,所以這種卡頓容易讓人摸不著頭腦,

而記憶體作為計算機程式運行最重要的資源之一,需要運行程序中做到合理的資源分配與回收,不合理的記憶體占用輕則使得用戶應用程式運行卡頓、ANR、黑屏,重則導致用戶應用程式發生 OOM(out of memory)崩潰,

我們需要在各種機器資源上保持優秀的流暢性和穩定性,記憶體優化是必須要重視的環節,但是我們即使有接入如Bugly的線上例外采集平臺,也不能夠保證通過例外日志找到OOM的原因,絕大多數的OOM,例外日志顯示的只是壓倒駱駝的最后一根稻草,而不是直接的原因,

如下圖:

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

這時候APM(Application Performance Monitor ,應用性能監控)的重要性就體現出來了,如果我們能夠對應用上線后的各項性能進行監控,在出現問題時能提取監控資料,從而定位到存在性能問題的地方快速解決,這不香嗎?

如何進行線上性能監控,有效進行性能優化?

本文針對“性能優化”這個要點,獻上一份 Android性能優化的詳細攻略,從各個方面對目標產品進行全方位的“優化”,讓產品的性能從各個方面得到提升,希望大家喜歡,

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

我相信,只要大家認真鉆研完這份資料,跟著走一遍,你就有勇氣在簡歷上寫下熟悉Android線上性能監控,精通APP性能調優與專案實戰這些點,從此吊打所有向你提問線上性能監控的面試官,成為一個名副其實的面霸!

App性能優化要點大綱


這份《超全App性能優化知識技能手冊》一共有721頁,4個大點,25個小章節,不僅僅有詳細的底層原理的決議,還有專門的實踐案例

有需要的朋友,直接戳此處藍色字體即可跳轉免費領取通道!

(另外還有一個系列配套的性能優化專題的講解視頻需要的可以一起打包)

第一章 設計思想與代碼質量優化

  • 六大原則
    單一職責原則
    里氏替換原則
    依賴倒轉原則
    介面隔離原則
    ……
  • 設計模式:結構型模式
    橋接模式
    配接器模式
    裝飾器模式
    代理模式
    門面(外觀)模式
    ……
  • 創建型模式
    建造者模式
    單例模式
    抽象工廠模式
    工廠方法模式
    ……
  • 資料結構
    陣列
    堆疊
    佇列
    鏈表

    ……
  • 演算法
    排序演算法
    查找演算法
    ……

第二章 程式性能優化

  • 啟動速度與執行效率優化
    冷啟動和熱啟動決議
    APP 啟動黑白屏解決辦法
    APP 卡頓問題分析及解決方案
    啟動速度與執行效率優化之 StrictMode
    ……

  • 布局檢測與優化
    布局層級優化
    過度渲染
    ……

  • 記憶體優化
    記憶體抖動和記憶體泄漏
    記憶體大戶
    Bitmap 記憶體優化
    Profile 記憶體監測工具
    Mat 大物件與泄漏檢測
    耗電優化
    網路傳輸與資料存盤優化網路傳輸與資料存盤優化
    APK 大小優化
    螢屏適配
    ……

  • 耗電優化
    Doze&Standby
    Battery Historian
    JobScheduler
    WorkManage

  • 網路傳輸與資料存盤優化
    google 序列化工具 protobuf
    7z 極限壓縮
    ……

  • APK 大小優化
    APK 瘦身
    微信資源混淆原理
    ……

  • 螢屏適配
    進行適配的原理
    螢屏解析度限定符與 smallestWidth 限定符適配原理
    為什么選擇 smallestWidth 限定符適配
    怎么適配其他 module
    常見問題處理
    ……

  • OOM 問題原理決議
    adj 記憶體管理機制
    JVM 記憶體回識訓制與 GC 演算法決議
    生命周期相關問題總結
    Bitmap 壓縮方案總結
    ……

  • ANR 問題決議
    AMS 系統時間調節原理
    程式等待原理分析
    ANR 問題解決方案
    ……

  • Crash 監控方案
    Java 層監控方案
    Nativie 層監控方案
    ……

第三章 開發效率優化

  • 分布式版本控制系統 Git
    企業高效持續集成平臺場景介紹
    GIT 分布式版本控制系統
    GIT 分支管理
    ……)
  • 自動化構建系統 Gradle:
  • Gradle 與 Android 插件
    gradle 與 android gradle 插件的關系
    Gradle Transform API 的基本使用
    ……
  • Gradle Transform API 的基本使用
    什么是 Transform
    Transform 的使用場景
    Transform API 學習
    輸入的型別
    ……
  • 自定義插件開發
    Gradle 插件簡介
    開始準備
    實踐
    自定義 Gradle 插件
    buildSrc 模塊方式
    ……
  • 插件實戰
    多渠道打包
    發版自動釘釘
    ……

第四章 APP 性能優化實踐

  • 啟動速度
    應用啟動的一般流程
    冷啟動和熱啟動
    啟動速度的測量
    啟動視窗優化
    執行緒優化
    系統調度優化
    GC 優化
    IO 優化
    資源重排
    主頁布局優化
    類加載優化
    選擇合適的啟動框架
    減少 Activity 的跳轉層次
    廠商優化
    后臺保活
    ……

  • 流暢度
    性能問題分析的一些工具和套路
    通過性能資料資料分析
    Android 平臺性能導致的性能案例
    Android App 自身導致的性能問題
    低記憶體的資料特征和行為特征
    應用寶
    訊飛輸入法無障礙服務導致的整機卡頓分析
    位元組跳動:今日頭條圖文詳情頁秒開實踐
    ……

  • 抖音在 APK 包大小資源優化的實踐
    圖片壓縮
    webp 無侵入式兼容
    多 DPI 優化
    重復資源合并
    shrinkResource 嚴格模式
    資源混淆(兼容 aab 模式)
    ARSC 瘦身
    ……

  • 優酷回應式布局技術全決議
    優酷APP回應式布局技術概述
    優酷APP回應式布局Android落地
    在分發場景的落地
    在消費場景的落地
    優酷APP回應式布局之測驗方案
    ……

  • 網路優化
    手機淘寶在網路的鏈路優化
    百度 APP 在網路深度優化的實踐
    ……

  • 手機淘寶雙十一性能優化專案揭秘
    一秒法則的實作
    啟動時間和頁面幀率提升 20%
    Android 手機記憶體節省50%
    ……

  • 高德 APP 全鏈路原始碼依賴分析
    高德 APP 平臺架構
    基礎實作原理
    專案架構
    應用場景及實作原理
    ……

  • 徹底干掉OOM的實戰經驗分享
    排查記憶體泄漏
    兜底策略
    記憶體峰值太高
    特大圖排查優化
    ……

  • 微信 Android終端記憶體優化實踐
    Activity 泄露檢測
    Bitmap 分配及回收追蹤
    Native 記憶體泄漏檢測
    執行緒監控
    記憶體監控
    ……

總結

如果你也想提升自己移動開發的性能優化技術,或者是正在準備移動開發崗的面試,我覺得這份筆記你必定不能錯過,

有需要的朋友,直接戳此處藍色字體即可跳轉免費領取通道!

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/278896.html

標籤:其他

上一篇:unity游戲開發之谷歌上架準備

下一篇:android 如何將NFC 讀、寫功能寫在自定義的Service中

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more