安卓性能調優之-掉幀測試

掉幀指的是某一幀沒有在規定時間內完成渲染,導致 UI 畫面不流暢,產生視覺上的卡頓、跳幀現象。

  1. Android目標幀率
    • 一般情況下,Android設備的屏幕刷新率是60Hz,即每秒需要渲染60幀(Frame Per Second, FPS)。
  2. 每幀時間預算
    • 60 FPS → 1秒鐘1000ms / 60 ≈ 16.67ms,即每一幀的渲染時間不能超過16.67ms,否則就會出現掉幀。
    • 120Hz設備 → 每幀8.33ms預算。
  3. 掉幀的直觀表現
    • 頁面滑動、動畫卡頓或不流暢。
    • 操作有延遲,UI反饋慢。
  4. 即呈現速度緩慢和幀凍結判斷
    • 呈現速度緩慢:在呈現速度緩慢的幀數較多的頁面,當超過50%的幀呈現時間超過16毫秒時,用戶感官明顯卡頓。
    • 幀凍結:幀凍結的繪制耗時超過700ms,為嚴重卡頓問題。

RecyclerView卡頓掉幀測試

續集上篇文章,在 ExampleStartupBenchmark 繼續加如以下代碼:

private final String TARGET_PACKAGE_NAME = "com.xxx.demo";//...@Testpublic void scrollRecyclerView() {mBenchmarkRule.measureRepeated(TARGET_PACKAGE_NAME, // 你的應用包名Collections.singletonList(new FrameTimingMetric()), // 記錄 UI 幀率信息CompilationMode.DEFAULT, // 默認編譯模式5, // 測試 5 次scope -> {Log.d("xaye","scrollRecyclerView test begin");// **1. 啟動 MainActivity**scope.startActivityAndWait();try {Thread.sleep(4000); // 等待界面切換} catch (InterruptedException e) {throw new RuntimeException(e);}// **3. 執行 RecyclerView 滾動**performRecyclerViewScroll();return null;});}private void performRecyclerViewScroll() {// 查找 RecyclerViewUiScrollable recyclerView = new UiScrollable(new UiSelector().className("androidx.recyclerview.widget.RecyclerView"));if (recyclerView.exists()) {try {Log.d("xaye","performRecyclerViewScroll");recyclerView.flingForward(); // 滑動一屏recyclerView.flingBackward(); // 滑動回去} catch (Exception e) {e.printStackTrace();}}}

和前面文章《安卓性能調優之-檢測應用啟動速度》介紹的一樣,先安裝 release版本應用,系統沒有要求可以是user版本的,點擊 scrollRecyclerView()左邊的運行按鈕 “RUN scrollRecyclerView”,然后會重啟應用,上面代碼中 Thread.sleep(4000),是給你留4s時間去點擊到 含有 recycleview 的界面,然后就可以自動進行滑動測試了。

在這里插入圖片描述
點擊測試右側藍色字體,進入查看詳情界面:
在這里插入圖片描述
可以通過選擇CPU波動范圍較大的區域和右側火焰圖查看代碼具體耗時情況,根據具體代碼,進行解決,一般的耗時解決包括:異步圖片加載、避免主線程I/O、對象池化等…

測試結果分析

1. frameCount(幀數量統計)
min 131.0,   median 210.0,   max 218.0
  • 含義:測試期間記錄的渲染幀總數,反映滾動的持續時間和流暢度。
  • min (131):最低幀數,可能出現在滾動啟動或停止階段。
  • median (210):中位數幀數,代表典型滾動場景的幀數量。
  • max (218):最高幀數,接近連續滾動的理想狀態。

分析
幀數范圍較集中(131-218),中位數210表明整體滾動較為穩定,但最低131幀可能存在啟動階段的性能開銷。


2. frameDurationCpuMs(CPU每幀處理耗時百分位)
P50 11.6,   P90 17.3,   P95 20.4,   P99 33.8
  • 含義:CPU處理單幀所需時間的百分位分布(單位:毫秒)。
  • P50 (11.6ms):50%的幀CPU耗時≤11.6ms(優于16.67ms的60fps標準)。
  • P90 (17.3ms):90%的幀≤17.3ms(接近60fps臨界值)。
  • P95 (20.4ms):5%的幀存在輕微卡頓(>16.67ms)。
  • P99 (33.8ms):1%的幀明顯卡頓(約30fps)。

關鍵閾值

  • ≤16.67ms:可維持60fps流暢渲染。
  • >16.67ms:幀率下降,用戶可能感知卡頓。

性能結論

  • 90%的幀滿足60fps要求,但頂部5%的幀存在優化空間,尤其是1%的嚴重卡頓(33.8ms)。

3. Traces: Iteration 0 1 2 3 4
  • 含義:測試共執行5次獨立迭代,排除偶然性,確保結果可靠性。
  • 最佳實踐:若某次迭代結果異常(如極端值),需檢查是否因系統后臺任務干擾。

指標達標情況
P50 CPU耗時11.6ms? 優秀 (<<16.67ms)
P90 CPU耗時17.3ms?? 臨界 (≈16.67ms)
P95 CPU耗時20.4ms? 卡頓 (>16.67ms)
P99 CPU耗時33.8ms? 嚴重卡頓

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79095.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【運維自動化-標準運維】職能化功能如何使用?

職能化功能主要用于一些固化的標準流程可以通過權限開放的方式給到那些負責固定職能的非運維人員&#xff0c;比如外包操作員來執行操作&#xff0c;如此可以釋放一些運維的人力&#xff0c;讓其可以專注流程的建設和優化。實操演示 新建職能化流程&#xff08;運維角色操作&a…

游戲引擎學習第224天

回顧游戲運行并指出一個明顯的圖像問題。 回顧一下之前那個算法 我們今天要做一點預加載的處理。上周剛完成了游戲序章部分的所有剪輯內容。在運行這一部分時&#xff0c;如果觀察得足夠仔細&#xff0c;就會注意到一個問題。雖然因為視頻流壓縮質量較低&#xff0c;很難清楚…

【小沐學GIS】基于C++繪制三維數字地球Earth(QT5、OpenGL、GIS、衛星)第五期

&#x1f37a;三維數字地球系列相關文章如下&#x1f37a;&#xff1a;1【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐學GIS】…

OpenAI 最新發布的 GPT-4.1 系列在 API 中正式上線

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【力扣】day1

文章目錄 27.移除元素26. 刪除有序數組的重復項 27.移除元素 26. 刪除有序數組的重復項 我們仔細看一下這兩道題的最后的返回值,為什么第一題返回slow 而第二題返回slow1 最后的返回值該如何返回絕對不是憑感覺,我們自己分析一下第一個slow,從0位置開始, 遇到val值就開始和fas…

完全無網絡環境的 openEuler 系統離線安裝 ClamAV 的詳細步驟

準備工作&#xff08;在外網機器操作&#xff09; 1. 下載 ClamAV RPM 包及依賴 mkdir -p ~/clamav-offline/packages cd ~/clamav-offline/packages# 使用 yumdownloader 下載所有依賴包&#xff08;需提前安裝 yum-utils&#xff09; sudo dnf install yum-utils -y sudo y…

3.2.2.2 Spring Boot配置視圖控制器

在Spring Boot中配置視圖控制器可以簡化頁面跳轉跳邏輯。通過實現WebMvcConfigurer接口的addViewControllers方法&#xff0c;可以直接將URL映射到特定的視圖&#xff0c;而無需編寫控制器類。例如&#xff0c;將根路徑"/"映射到welcome.html視圖&#xff0c;當訪問應…

數據庫—函數筆記

一&#xff0c;數據庫函數的分類 內置函數&#xff08;Built-in Functions&#xff09; 數據庫系統自帶的函數&#xff0c;無需額外定義即可直接調用。 聚合函數&#xff1a;對數據集進行計算&#xff08;如 SUM, AVG, COUNT&#xff09;。 字符串函數&#xff1a;處理文本數據…

YOLOv2訓練詳細實踐指南

1. YOLOv2架構與原理詳解 1.1 核心改進點 YOLOv2相比YOLOv1的主要改進&#xff1a; 采用Darknet-19作為backbone&#xff08;相比VGG更高效&#xff09;引入Batch Normalization提高穩定性與收斂速度使用anchor boxes機制代替直接預測邊界框引入維度聚類確定anchor boxes尺寸…

詳解如何復現DeepSeek R1:從零開始利用Python構建

DeepSeek R1 的整個訓練過程&#xff0c;說白了就是在其基礎模型&#xff08;也就是 deepseek V3&#xff09;之上&#xff0c;用各種不同的強化學習方法來“雕琢”它。 咱們從一個小小的本地運行的基礎模型開始&#xff0c;一邊跟著 DeepSeek R1 技術報告 的步驟&#xff0c;…

MCP Server 開發實戰 | 大模型無縫對接 Grafana

前言 隨著大模型的飛速發展&#xff0c;越來越多的 AI 創新顛覆了過往很多產品的使用體驗。但你是否曾想過&#xff0c;在向大型語言模型提問時&#xff0c;它能否根據你的需求精準返回系統中的對應數據&#xff1f;例如&#xff0c;當用戶查詢 Grafana 服務時&#xff0c;模型…

塊存儲、文件存儲和對象存儲的特點、應用場景及區別

塊存儲、文件存儲和對象存儲的特點、應用場景及區別 塊存儲 特點&#xff1a;塊存儲將數據分割成固定大小的塊&#xff0c;每個塊都有唯一的標識符。數據以塊為單位進行讀寫操作&#xff0c;適合需要高性能和低延遲的場景。 應用場景&#xff1a;數據庫存儲、虛擬機磁盤、高性能…

OpenCv--換臉

引言 在當今數字化時代&#xff0c;圖像處理技術的發展日新月異。換臉技術作為其中一項極具趣味性和挑戰性的應用&#xff0c;吸引了眾多開發者和愛好者的目光。OpenCV 作為一款強大的開源計算機視覺庫&#xff0c;為我們實現換臉提供了豐富的工具和方法。本文將深入探討如何使…

安卓基礎(SQLite)

基礎 import sqlite3# 連接到數據庫 conn sqlite3.connect(mydatabase.db) cursor conn.cursor()# 執行查詢 cursor.execute("SELECT * FROM users") rows cursor.fetchall()for row in rows:print(row)# 關閉連接 conn.close() 創建一個繼承自 SQLiteOpenHelpe…

QuickAPI 核心能力解析:構建數據服務化的三位一體生態

在企業數據資產化運營的進程中&#xff0c;如何打破數據開發與共享的效率瓶頸&#xff0c;實現從 “數據可用” 到 “數據好用” 的跨越&#xff1f;麥聰軟件的 QuickAPI 給出了系統性答案。作為 SQL2API 理念的標桿產品&#xff0c;QuickAPI 通過SQL 編輯器、數據 API、數據市…

《計算機視覺度量:從特征描述到深度學習》—生成式人工智能在工業檢測的應用

2022 年 11 月 30 日一個很重要的標志事件就是chatgpt的出現&#xff0c;打開了生成式人工智能的開端。這也許會是一個歷史性的時刻&#xff0c;今天是2025年4月&#xff0c;過去兩年多&#xff0c;那個時刻目前回想還是對本人造成了沖擊&#xff0c;一個完全有自主分析能力的生…

【軟件測試】自動化測試框架Pytest + Selenium的使用

Pytest Selenium 是一種常見的自動化測試框架組合&#xff0c;用于編寫和執行 Web 應用程序的自動化測試。Pytest 是一個強大的 Python 測試框架&#xff0c;而 Selenium 是一個用于瀏覽器自動化的工具&#xff0c;二者結合使用可以高效地進行 Web 應用的功能測試、UI 測試等。…

煤礦濕噴砂漿攪拌機組創新設計與關鍵技術研究

引言&#xff1a;濕噴工藝在煤礦支護中的革命性意義 在深部煤礦巷道支護領域&#xff0c;濕噴混凝土技術以其回彈率低&#xff08;<15%&#xff09;、粉塵濃度小&#xff08;<10mg/m&#xff09;的顯著優勢&#xff0c;逐步取代傳統干噴工藝。作為濕噴工藝的核心設備&am…

如何處理ONLYOFFICE文檔服務器與Java Web應用間的安全認證和授權

如何處理ONLYOFFICE文檔服務器與Java Web應用間的安全認證和授權&#xff1f; 處理 ONLYOFFICE 文檔服務器與 Java Web 應用之間的安全認證和授權&#xff0c;通常涉及以下幾個關鍵步驟和技術&#xff1a; 1. JWT (JSON Web Token) 認證 啟用 JWT&#xff1a; ONLYOFFICE 文檔…

無參數RCE

無參數RCE&#xff08;Remote Code Execution&#xff0c;遠程代碼執行&#xff09; 是一種通過利用目標系統中的漏洞&#xff0c;在不直接傳遞用戶可控參數的情況下&#xff0c;實現遠程執行任意代碼的攻擊技術。與傳統的RCE攻擊不同&#xff0c;無參數RCE不依賴外部輸入參數…