美文网首页flutter 面试相关Flutter面试题
Flutter 线上异常捕获和信息采集

Flutter 线上异常捕获和信息采集

作者: summer_maimaiti | 来源:发表于2023-02-25 21:49 被阅读0次

前提:Flutter异常指的是Flutter程序Dart代码运行时意外发生的错误事件。我们可以通过try-catch机制来获取它。但是Dart采用时间循环机制不强制要求处理异常处理,各个任务的运行状态是相互独立,即便某个任务出现了异常我们没有捕获到,Dart也不会退出。只是导致当前任务后续的代码不会被执行,用户仍可以继续使用其他功能。

一、App异常

同步异常:可以通过try-catch捕获,异步异常:通过Future的catchError语句捕获。

//使用try-catch捕获同步异常
try {
  throw StateError('This is a Dart exception.');
}
catch(e) {
  print(e);
}
 
//使用catchError捕获异步异常
Future.delayed(Duration(seconds: 1))
    .then((e) => throw StateError('This is a Dart exception in Future.'))
    .catchError((e)=>print(e));
    
//注意,以下代码无法捕获异步异常
try {
  Future.delayed(Duration(seconds: 1))
      .then((e) => throw StateError('This is a Dart exception in Future.'))
}
catch(e) {
  print("This line will never be executed. ");
}

直接捕获Zone.runZoned方法,Zone表示一个代码执行的环境范围,类似于沙盒,不同沙盒之间是相互隔离的。

runZoned(() {
  //同步抛出异常
  throw StateError('This is a Dart exception.');
}, onError: (dynamic e, StackTrace stack) {
  print('Sync error caught by zone');
});
 
runZoned(() {
  //异步抛出异常
  Future.delayed(Duration(seconds: 1))
      .then((e) => throw StateError('This is a Dart exception in Future.'));
}, onError: (dynamic e, StackTrace stack) {
  print('Async error aught by zone');
});

二、Famework异常

flutter框架引发的异常,通常由应用代码触发flutter框架底层异常判断引起的。

为了集中处理框架异常,Flutter 提供了 FlutterError 类,这个类的 onError 属性会在接收到框架异常时执行相应的回调。因此,要实现自定义捕获逻辑,我们只要为它提供一个自定义的错误处理回调即可。在下面的代码中,我们使用 Zone 提供的 handleUncaughtError 语句,将 Flutter 框架的异常统一转发到当前的 Zone 中,这样我们就可以统一使用 Zone 去处理应用内的所有异常了:

FlutterError.onError = (FlutterErrorDetails details) async {
  //转发至Zone中
  Zone.current.handleUncaughtError(details.exception, details.stack);
};
 
runZoned<Future<Null>>(() async {
  runApp(MyApp());
}, onError: (error, stackTrace) async {
 //Do sth for error
});

三、使用bugly来搜集异常log

相关文章

  • Flutter异常捕获runZoned

    Flutter异常捕获Dart中可以通过try/catch/finally来捕获代码块异常,这个和其它变成语言类似...

  • Flutter异常捕获方式

    同步异常捕获 同步捕获:使用try catch 异步异常捕获 方法1: 使用Flutter提供的catchErro...

  • Flutter异常捕获

    无论我们的应用写得多么完美、测试得多么全面,总是无法完全避免线上的异常问题。 这些异常,可能是因为不充分的机型适配...

  • Flutter 异常捕获

    Flutter 异常 Flutter 异常指的是,Flutter 程序中 Dart 代码运行时意外发生的错误事件。...

  • Dart-4 异常捕获机制

    1.Flutter 异常捕获机制 Dart 中可以通过 try/catch/on /finally 来捕获代码块...

  • SprnigMVC的统一异常处理

    我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息...

  • SpringMVC中的统一异常处理

    系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主...

  • Flutter异常捕获处理

    本文内容非原创, 仅用于整理记录原文链接?: flutter 崩溃收集 Dart线程模型及异常捕获 Flutter...

  • Flutter异常捕获runZoned

    今天开始看gsy_github_app_flutter入口文件就来了个runZoned,代码如下 ErrorWid...

  • flutter 全局异常捕获

    dart开发中,try-catch使用方式: 我们使用如上方式,在关键代码处对Flutter进行异常捕获。不过,还...

网友评论

    本文标题:Flutter 线上异常捕获和信息采集

    本文链接:https://www.haomeiwen.com/subject/sykqldtx.html