前言最近阅读 Catcher、BugSnag、Rollbar 三个 Flutter 异常监控开源框架,文章链接如下:
Flutter 异常监控 - 壹 | 从 Zone 说起
Flutter 异常监控 - 贰 | 框架 Catcher 原理分析
Flutter 异常监控 - 叁 | 从 bugsnag 源码学习如何追溯异常产生路径
Flutter 异常监控 - 肆 | Rollbar 源码赏析
这篇文章将从实现功能,优缺点,设计思想等方面做个总结,方便开发中技术选型。
需求列表罗列下认为比较重点需求,并不表示框架所有需求只有这些。
功能对比所有上述需求主要体现在异常产生到发送过程中,大致包括如下几个方面
Catcher
Bugsnag
Rollbar
自定义 UI 显示异常
是(4 种报告模式)
不支持
不支持
异常处理线程
main isolate
对端决定
子 isolate
自定义包装过程
部分支持
不支持
支持
异常存储
不支持
对端存储
Dart 侧存储
自定义上报处理程序
6 种
1 种(自研)
1 种(自研)
异常路径生成追溯
不支持
自 ...
一. Rollbar可以帮你解决哪些问题
无特别说明,文中Rollbar统指Rollbar-flutter
1. 代码复用
Rollbar官方文档说是纯Dart实现,该特征意味着自带”代码复用”光环。
如图当接入端(Third-APP)调用Rollbar SDK时表示包含的网络(异常数据上传等)和存储(异常存储管理)可达到复用效果。
若Flutter异常监控框架非纯Dart实现(第三篇中Bugsnag),就存在代码无法复用问题,如图,Dart-Crash-SDK是只是层壳依赖对端SDK,最终导致各平台(android,ios,…)都须对端SDK(android-crash-sdk, ios-crash-sdk,…)适配,导致网络和存储逻辑对端SDK都须各自实现一遍,严重逻辑重复。
由此在做软件多端架构设计时,Dart侧可理解成是多平台公共代码集合,如果存在多端逻辑功能代码完全可以抽离到Dart侧以复用,减少测试和人力成本。
2. 定制包装操作前面两篇文章我们知道,捕获到原始异常后对其中的Error和StackTrace有相当部分的工作是对原始异常数据的包装再将包装类数据发送给对端或 ...
前言没错,继Flutter异常监控 | 框架Catcher原理分析 之后,带着那颗骚动的好奇心我又捣鼓着想找其他Flutter异常监控框架读读,看能不能找到一些好玩的东西,于是在官方介绍第三方库里发现了这货Bugsnag,大致扫了下源码发现flutter侧主流程很简单没啥东西可看滴,因为这货强烈依赖对端能力,Flutter异常捕获之后就无脑抛给对端SDK自己啥都不干 ,抛开Bugsnag这种处理异常的方式不论,源码里却也有一些之我见的亮度值得借鉴和学习,比如本文主要介绍Bugsnag如何追溯异常路径的设计思想和实现,对异常捕获的认识有不少帮助。
Bugsnag功能简介在介绍可追溯异常路径设计之前,有必要先科普下Bugsnag是什么? 让大佬们有一个大局观,毕竟后面介绍内容只是其中一个小的点。
Bugsnag跟Catcher一样也是Flutter异常监控框架,Bugsnag-flutter只是壳,主要作用有:
规范多平台(安卓,ios)异常调用和上报的接口。
拿到flutter异常相关数据传递给对端。
主要支持功能:
dart侧异常支持手动和自动上报。
支持上报数据序列化,有网环境 ...
前言在给 Flutter 应用做异常监控的时候,一开始我是拒绝滴,如果不考虑 Flutter Engine 和 native 侧的监控,用我另一篇文章中不得不知道的 Flutter 异常捕获知识点 提到的方法基本可以搞定所有 Dart 侧异常,关键代码也不多,复杂不到哪里去。如下(有不清楚原理的可以看下原文,这里就不赘叙了):
123456789101112131415161718192021222324252627void main() { FlutterError.onError = (FlutterErrorDetails details) { Zone.current.handleUncaughtError(details.exception, details.stack);//Tag1 //或customerReport(details); }; //Tag2 Isolate.current.addErrorListener( RawReceivePort((dynamic pair) async { ...
Flutter
未读如果你正需要处理Flutter异常捕获,那么恭喜你,找对地了,这里从根源上给你准备了Flutter异常捕获需要是所有知识和原理,让你更深刻认识Flutter Zone概念。
Zone是什么12/// A zone represents an environment that remains stable across asynchronous/// calls.
SDK中描述:表示一个环境,这个环境为了保持稳定异步调用。
通俗理解39 | 线上出现问题,该如何做好异常捕获与信息采集?中描述:
我们可以给代码执行对象指定一个 Zone,在 Dart 中,Zone 表示一个代码执行的环境范围,其概念类似沙盒,不同沙盒之间是互相隔离的。如果我们想要观察沙盒中代码执行出现的异常,沙盒提供了 onError 回调函数,拦截那些在代码执行对象中的未捕获异常。
Zone创建Dart提供了runZoned方法,支持Zone的快速创建
1234R runZoned<R>(R body(), {Map<Object?, Object?>? zoneValues ...
看过许多 AI 制作 PPT 软件,最终还是被 Gamma 惊艳到。Gamma 是一款基于人工智能技术的 PPT 制作工具,可以帮助用户轻松制作高质量的 PPT 演示文稿。
痛点解决相比传统制作 PPT 方式,Gamma 可以解决哪些如下 7 个痛点:
一句话生成 PPT传统制作 PPT,首先我们得定义一个主题,不管该主题是自愿的还是被迫的,接受抑或不接受。
在不情愿或缺乏经验前提下,面临的首要问题是没思路。需要绞尽脑汁去规划大纲,网上各种查资料找模板,最后好不容易找到一个匹配度高点的模板,不然就是付费无法下载,不然就是费尽九牛二虎之力做好后老板 Say No!。
Gamma 直接帮你解决上述中提到的 “无经验”、“无思路” 、“无模板”,三无问题。下面 Gamma 的表演时刻正式开始。。。。
首先准备生成如图,只需输入一个 PPT 主题,Gamma 就会根据主题生成大纲。(当然如果你想修改大纲也是可以的。)
点击继续,即可根据大纲自动生成PPT内容并自动配图。
如下是生成过程,勿扰~~下图是正在根据大纲生成中。AI 在忙,不要动,你可以翘着二郎腿来杯咖啡。。。。,享受有 Gamma ...
Rust探秘
未读使用场景JAVA 与 Rust 互操作让 Rust 可以背靠 Java 大生态来做更多事情,而 Java 也可以享受 Rust 语言特性的内存安全,所有权机制,无畏并发。
互操作的典型场景包括:
性能优化:利用 Rust 处理计算密集型任务,提高 Java 应用的整体性能。
系统级编程:结合 Rust 的底层控制能力与 Java 的高级抽象,实现更高效的系统交互。
跨平台开发:使用 Rust 编写核心逻辑,通过 JNI 在不同平台上与 Java 交互,实现高效跨平台开发。
安全关键应用:在金融、医疗等领域,利用 Rust 处理敏感数据和核心功能,保证高度安全性。
实时系统:在游戏引擎、音频处理等延迟敏感的应用中,使用 Rust 处理时间关键部分。
背景知识JNI
全称 Java Native Interface,它允许 Java 代码与其他语言(如 C 或 C++)编写的应用程序进行互操作。
JNI Specification:这是 JNI 的官方规范,详细描述了 JNI 的使用方法、接口和功能。
Java 虚拟机(JVM)
JNI 是 Java 虚拟机的一部分,JVM 在启动 ...