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.mzph.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样式…