Flutter 内存信息获取

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

内存信息获取

内存获取主要有vm 内存信息获取、应用内存信息获取、类对象内存信息获取。

获取vm 内存信息及类对象内存信息可以通过 vm_service 获取,但在release模式下暂时无法获取。

获取应用整体内存信息需要调用插件使用原生手段获取。

异常信息获取

Flutter 异常分类

分类如下:

1.App 异常

a.同步异常

b.异步异常

2.Framework 异常

3.其他异常

APP 异常

App 异常一般就是我们自己写的代码出现的异常,如果不做处理会导致下面的代码不会执行。

通常同步异常可以通过try-catch 捕获处理,异步异常可以通过Future的catchError来捕获处理。

而Flutter也为我们提供了集中管理App异常的地方,那就是zone.runZoned 方法。

APP异常捕获

通过zone.runZoned 方法,将runApp包裹,就可以捕获所有的APP异常

 runZoned<Future<Null>>(() async {
   runApp(MyApp());
 }, onError: (error, stackTrace) async {
  //Do sth for error
 });
复制代码
 void main() {
   FlutterError.onError = (FlutterErrorDetails details) {
     //Do sth for error
   };
  ...
 }
复制代码
 FlutterError.onError = (FlutterErrorDetails details) async {
   // 转发异常到 Zone 中
   Zone.current.handleUncaughtError(details.exception, details.stack);
 };
复制代码
 Isolate.current.addErrorListener(new RawReceivePort((dynamic pair) {
   var isolateError = pair as List<dynamic>;
   var _error = isolateError.first;
   var _stackTrace = isolateError.last;
   Zone.current.handleUncaughtError(_error, _stackTrace);
 }).sendPort);
复制代码

通过isolate 的 addErrorListener 方法即可获取到当前未捕获的异常,同样,我们使用zone 的 handleUncaughtError 方法将异常转到zone中集中处理。

其他异常捕获

在Dart语言中,所有的Dart代码都运行在某个isolate中,它是类似于线程(thread)但不共享内存的独立运行的worker,是一个独立的Dart程序执行环境。其实默认环境就是一个main isolate。关于isolate的更多使用就不过多介绍,需要知道的是isolate 提供了方法可以获取到当前isolate中所有未捕获的异常。

其他异常

通过Zone 提供的 handleUncaughtError方法即可将异常转过去。

上面APP异常我们是在zone.runZoned中处理的异常,这里也可以将异常转到zone.runZoned 中处理。

通过查看源码,我们知道通过设置FlutterError.onError 来设置自定义错误处理回调

Framework 异常捕获

Flutter Framework异常一般是自己写的代码导致了Flutter Framework内部代码出现异常,默认这些异常会直接弹出异常页面将异常信息展示出来。

Guess you like

Origin juejin.im/post/7032295356373303332