Flutter 内存信息获取
内存信息获取
内存获取主要有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内部代码出现异常,默认这些异常会直接弹出异常页面将异常信息展示出来。
转载自:https://juejin.cn/post/7032295356373303332