Flutter異常上報及性能監控實現

????????1. 頁面異常監測
? ? ? ? ?在Flutter中,通常用FlutterError監測Flutter框架拋出的異常,用runZonedGuarded監測應用中用戶代碼異常。
? ? ? ? ? ??
class AppGuarded {run(Widget app) {//1. 用FlutterError監測flutter框架拋出的異常FlutterError.onError = (FlutterErrorDetails details) async {//線上環境,將異常交給zone統一處理if (kReleaseMode) {Zone.current.handleUncaughtError(details.exception, details.stack!);} else {//開發期間,走Console拋出FlutterError.dumpErrorToConsole(details);}};//2. runZonedGuarded監測整個用應用代碼異常 不使用FlutterError默認只能捕捉業務代碼異常runZonedGuarded(() {runApp(app);}, (e, s) => _reportError(e, s));}///通過接口上報異常_reportError(Object error, StackTrace s) {print('kReleaseMode:$kReleaseMode');print('catch error:$error');}
}

????????2. 監測頁面流暢性(幀率)

????????幀率監測在Flutter中通常通過在SchedulerBinding中注冊fps相關回調來實現。通常需要保留最近若干個FrameTiming的總耗時,計算其平均值,以消除不必要數據波動。

void start() {SchedulerBinding.instance.addTimingsCallback(_onReportTimings);
}
// 不需監聽時移除
void stop() {SchedulerBinding.instance.removeTimingsCallback(_onReportTimings);
}
void _onReportTimings(List<FrameTiming> timings) {// TODO
}

?????????3. 頁面顯示耗時(FCP)

? ? ? ? ?記錄頁面初始化和首次上屏時間,然后計算其時間差即可。

@overrideinitState() {super.initState();//1. 記錄頁面創建時間double startTime = time(0);//2.注冊首幀顯示時間回調WidgetsBinding.instance.addPostFrameCallback((timeStamp) {double endTime = time(0);print('WidgetsBinding Test-${(context as Element).size}');});

? ? ? ? 4.?頁面PV監測

? ? ? ? 頁面PV監測核心是檢測到頁面棧的變化,以便統計出頁面曝光次數。如果應用采用自定義導航框架,只需在導航框架正確位置添加埋點即可。若采用的是系統默認的導航框架,則可通過繼承NavigatorObserver,捕獲Navigator的didPush和didPop回調。

//導航棧的變化監聽
class MyNavigator extends NavigatorObserver{@overridevoid didPop(Route<dynamic> route, Route<dynamic> previousRoute) {super.didPop(route, previousRoute);var previousName = '';if (previousRoute == null) {previousName = 'null';}else {previousName = previousRoute.settings.name;}print('YM----->NavObserverDidPop--Current:' + route.settings.name + '  Previous:' + previousName);}@overridevoid didPush(Route<dynamic> route, Route<dynamic> previousRoute) {super.didPush(route, previousRoute);var previousName = '';if (previousRoute == null) {previousName = 'null';}else {previousName = previousRoute.settings.name;}print('YM-------NavObserverDidPush-Current:' + route.settings.name + '  Previous:' + previousName);}

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

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

相關文章

STM32F4 HAL庫串口死鎖問題調試記錄

文章目錄 STM32F4 HAL庫串口死鎖問題調試記錄調試方法結果分析解決方法一&#xff1a;方法二&#xff1a; STM32F4 HAL庫串口死鎖問題調試記錄 使用方法&#xff1a;通過串口DMA固定周期向外發送數據&#xff0c;同時開啟串口DMA接收用于接收其它板卡發來的數據。 問題&#x…

2024年,智慧文旅領航新時代,重塑旅行體驗的未來篇章!

隨著科技的飛速發展&#xff0c;智慧文旅正成為旅游行業的新寵&#xff0c;以其獨特的魅力和無限可能&#xff0c;引領著旅行體驗的全面升級。 2024年&#xff0c;智慧文旅火爆出圈&#xff0c;成為各界關注的焦點&#xff0c;為游客帶來了前所未有的震撼與享受。 智慧文旅&a…

290.【華為OD機試】連續出牌數量(深度優先搜索DFS—JavaPythonC++JS實現)

??點擊這里可直接跳轉到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優質解題思路,高質量解題代碼(Java&Python&C++&JS分別實現),詳細代碼講解,助你深入學習,深度掌握! 文章目錄 一. 題目二.解題思路三.題解代碼Python題解代碼JAVA題解…

《猛獸派對》好玩嗎值得買嗎?蘋果電腦也能裝《猛獸派對》嗎?猛獸派對好友通行證 動物派對 猛獸對戰游戲

目錄 一、《猛獸派對》好玩嗎&#xff1f; 游戲玩法&#xff1a; 物理引擎&#xff1a; 關卡設計&#xff1a; 游戲特色&#xff1a; 評價&#xff1a; 榮譽&#xff1a; 二、蘋果電腦也能裝《猛獸派對》嗎&#xff1f; 第1步&#xff1a;下載并安裝CrossOver這款軟件…

C語言---文件操作(1)

1.文件的打開和關閉 fopen有2個參數&#xff0c;第一個是文件的名字&#xff0c;第二個是打開的模式&#xff08;例如是讀文件還是寫文件&#xff09; (1)該文件夾下面沒有data.txt文件&#xff0c;但是我執行了read操作&#xff0c;所以會顯示這樣的錯誤 &#xff08;2&#…

『NLP學習筆記』圖解GPT3(How GPT3 Works-Visualizations and Animations)

圖解GPT3(How GPT3 Works-Visualizations and Animations) 文章目錄 一. GPT-1 vs GPT-2 vs GPT-3 vs GPT-3.5 vs GPT-4二. GPT32.1. 訓練動圖2.2. 預測動圖2.3. 代碼生成示例三. 參考文章原作者主頁:Jay Alammar原英文鏈接:How GPT3 Works - Visualizations and Animations …

ApplicationContext容器

ApplicationContext容器 1.概述 ApplicationContext接口代表了一個Spring容器,它主要負責實例化、配置和組裝bean。ApplicationContext接口間接繼承了BeanFactory接口,相較于BeanFactory一些基本的容器功能,ApplicationContext接口是在BeanFactory接口基礎上進行了擴展,增…

SQL 術語:Join 中的 Build 和 Probe 是什么意思?

博主歷時三年精心創作的《大數據平臺架構與原型實現&#xff1a;數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行&#xff0c;點擊《重磅推薦&#xff1a;建大數據平臺太難了&#xff01;給我發個工程原型吧&#xff01;》了解圖書詳情&#xff0c;…

如何在Vue中實現事件處理?

Vue是一種流行的JavaScript框架&#xff0c;廣泛應用于前端開發。在Vue中&#xff0c;事件處理是一個非常關鍵的概念&#xff0c;可以幫助我們實現用戶與頁面的交互&#xff0c;今天我們就來探討一下如何在Vue中實現事件處理。 首先&#xff0c;讓我們先了解一下在Vue中如何綁…

[pdf]《軟件方法》強化自測題業務建模需求分析共191頁,230題

潘加宇《軟件方法》強化自測題業務建模需求分析共191頁&#xff0c;230題&#xff0c;已上傳CSDN資源。 在完成書中自測題基礎上&#xff0c;進一步強化。 也可到以下地址下載&#xff1a; 資料http://www.umlchina.com/url/quizad.html 如果需要網盤提取碼&#xff1a;uml…

【Python】1. 背景知識

認識 Python 計算機基礎概念 什么是計算機? 很多老一輩的人, 管下面這個叫做計算機. 然鵝, 它只是 “計算器”, 和計算機是有很大區別的. 現在我們所說的計算機, 不光能進行算術運算, 還能進行邏輯判斷, 數據存儲, 網絡通信等等功能,。 以至于可以自動的完成非常復雜的工作…

代碼隨想錄day10(2)字符串:反轉字符串Ⅱ (leetcode541)

題目要求&#xff1a;給定一個字符串 s 和一個整數 k&#xff0c;從字符串開頭算起, 每計數至 2k 個字符&#xff0c;就反轉這 2k 個字符中的前 k 個字符。如果剩余字符少于 k 個&#xff0c;則將剩余字符全部反轉。如果剩余字符小于 2k 但大于或等于 k 個&#xff0c;則反轉前…

Spring與Spring Boot:簡化Java開發的革命性框架

Spring與Spring Boot&#xff1a;簡化Java開發的革命性框架 摘要&#xff1a;本文將深入探討Spring與Spring Boot兩個在Java開發領域具有重要地位的框架。我們將了解它們的核心概念、區別、聯系以及在實際項目中的應用。通過本文&#xff0c;您將更好地理解如何使用這兩個框架…

Zookeeper4:Java客戶端、應用場景以及實現、第三方客戶端curator工具包

文章目錄 Java連接Zookeeper服務端依賴代碼使用 應用場景統一命名服務統一配置管理統一集群管理服務器節點動態上下線理解實現模擬服務提供者【客戶端代碼】-注冊服務模擬服務消費者【客戶端代碼】-獲取服務信息進行請求消費 軟負載均衡分布式鎖理解實現 生產集群安裝N臺機器合…

Java中的Collection

Collection Collection 集合概述和使用 Collection集合概述 是單例集合的頂層接口,它表示一組對象,這些對象也稱為Collection的元素 JDK 不提供此接口的任何直接實現.它提供更具體的子接口(如Set和List)實現 創建Collection集合的對象 多態的方式 具體的實現類ArrayList C…

leetcode - 71. Simplify Path

Description Given a string path, which is an absolute path (starting with a slash ‘/’) to a file or directory in a Unix-style file system, convert it to the simplified canonical path. In a Unix-style file system, a period ‘.’ refers to the current di…

MATLAB環境下基于熵的聲納圖像分割算法

聲納圖像作為準確獲取水下信息的重要途徑之一&#xff0c;在國防、軍事、工程等方面發揮著巨大作用。然而&#xff0c;由于水聲信道的復雜多變和聲波本身的傳播損失&#xff0c;聲納圖像往往呈現出分辨率和對比度不高、噪聲干擾嚴重、目標輪廓模糊等特點。 聲納圖像的分割指的…

FCIS 2023網絡安全創新大會:洞察前沿技術,探索安全新境界(附大會核心PPT下載)

隨著信息技術的飛速發展&#xff0c;網絡安全問題日益凸顯&#xff0c;成為全球關注的焦點。作為網絡安全領域的重要盛會&#xff0c;FCIS 2023網絡安全創新大會如期而至&#xff0c;匯聚了全球網絡安全領域的頂尖專家、學者、企業家和政策制定者&#xff0c;共同探討網絡安全的…

備戰藍橋杯————差分數組1

引言 一、差分數組 什么是差分數組 差分數組的作用 Java代碼實現差分數組 二、 區間加法 題目描述 代碼與解題思路 總結 引言 在數字世界的海洋中&#xff0c;數據是構建和優化算法的基石。然而&#xff0c;當我們面對需要頻繁進行區間操作的數組時&#xff0c;傳統的逐元素…

ABAP - SALV教程10 添加可編輯checkbox列

幾乎所有的功能報表都會有那么一個選擇列&#xff0c;問了業務顧問&#xff0c;業務顧問說是用戶不習慣使用報表原生的選擇模式。效果圖SALV的選擇列是通過將列設置成checkbox_hotspot樣式&#xff0c;注冊單擊事件完成勾選功能的。完成步驟 將SEL列設置成checkbox_hotspot樣式…