Flutter异常信息收集-Fabric Crashlytics 【转载】

218 阅读2分钟

对于一个应用来说,异常崩溃信息收集至关重要,接触过flutter的开发者应该都知道,flutter使用dart开发大部分异常信息都是导致页面显示不正确(页面显示错误栈信息)或者空白,那flutter如何捕获这些异常,捕获异常后又如何收集上报监控系统,对于原生开发者来说,Fabric Crashlytics(崩溃收集系统)大家肯定不陌生,本文讲述Flutter如何使用fabric进行异常信息收集监控。主要分如下三步:

一  Flutter dart端捕获异常

使用FlutterError.onError 和 runZoned, 在main.dart的main()方法中添加如下代码:

二 通过channel把异常信息传到native:

上图代码中_reportError()是就是通过channel调用native方法,把error栈的信息传的native中,native端接收到error栈信息后如何上报fabric,请看第三步。

三 fabric收集异常信息

接入过fabric的开发者了解,fabric的接入及其简单,调用SDK的init及set deviceId一些基本信息就ok, 开发者并不需要主动去上传错误信息,fabric源码内部是通过实现Thread.UncaughtExceptionHandler接口,即自定义 Thread.UncaughtExceptionHandler来实现的,在uncaughtException方法中接收到错误信息并进行上报的, 之后把错误信息传递给默认的Exception处理器(注意这里所说的默认Exception处理器是在fabric源码初始化方法里通过Thread.getDefaultUncaughtExceptionHandler()获取的(并不一定是系统的哦)。

对于fabric收集大都是导致应用崩溃的错误日志,而对于flutter来说大部分异常信息只是页面上显示问题,并不会导致应用崩溃,我们只是想要向fabric上报异常信息,那要怎么做呢?其实方法很简单,只要分小三步:

1 、 定义FlutterException(继承Exception), 并且在应用内自定义Thread.UncaughtExceptionHandler,命名FlutterExceptionHandler,代码如下,注意init中的两行代码,很关键哦

在uncaughtException中对应FlutterException的异常,直接return,这样就不会往下传递到系统Exception处理器了,就可以保证应用不崩溃

2、 在fabric调用init方法之前进行FlutterExceptionHandler init,这样刚才提到的fabric里的默认Exception处理器就是FlutterExceptionHandler了

3、 在接收到dart端传过来的errro信息处调用Thread.getDefaultUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), new FlutterException(exceptionStr))即可。

(另外,说明下如果在第二小步之后没有其他地方调用Thread.setDefaultUncaughtExceptionHandler()的情况 这里的第三小步中的Thread.getDefaultUncaughtExceptionHandler() 为fabric sdk里的CrashlyticsUncaughtExceptionHandler )

在dart端制造个错误信息,试验下吧,这样打开fabric系统,就能看到异常信息了

本文转自 www.jianshu.com/p/02e69fbfa…,如有侵权,请联系删除。