Flutter 框架为我们在很多关键的方法进行了异常捕获 。 如果我们想自己上报异常 , 只需要提供一个自定义的错误处理回调即可 , 如:
void main() {FlutterError.onError = (FlutterErrorDetails details) {reportError(details);;... 有没有一套从天而降的代码 , 能够统一处理以上异常呢?
3.总结(一套代码捕获所有异常)
runZonedGuarded(() async {WidgetsFlutterBinding.ensureInitialized();FlutterError.onError = (FlutterErrorDetails details) {myErrorsHandler.onError(details.exception , details.stack);;runApp(MyApp()); (Object error StackTrace stack) {myErrorsHandler.onError(error stack);); 代码中出现了一句 , 上诉从没有出现过的代码即WidgetsFlutterBinding.ensureInitialized() , 当我把这行代码注释掉的时候 , 框架异常是捕获不到的 。
当时困扰了好久最后终于查到了原因:
上图是Flutter的架构层 , WidgetFlutterBinding用于与 Flutter 引擎交互 。我们的APM产品需要调用 native 代码来初始化 , 并且由于插件需要使用平台 channel 来调用 native 代码 , 这是异步完成的 , 因此必须调用ensureInitialized()确保你有一个 WidgetsBinding 的实例.
来自 docs :
Returns an instance of the WidgetsBinding creating and initializing it if necessary. If one is created it will be a WidgetsFlutterBinding. If one was previously initialized then it will at least implement WidgetsBinding.
注:如果你的应用在runApp 中调用了 WidgetsFlutterBinding.ensureInitialized() 方法来进行一些初始化操作 , 则必须在runZonedGuarded中调用WidgetsFlutterBinding.ensureInitialized()
六、异常上报 异常上报的整体方案是通过已有的插件增加接口 , 桥接Android APM 和 iOS APM库的自定义异常上报接口 。
插件增加函数
static void postException(error stack) {List args = [errorstack
;//将异常和堆栈上报至umapm_channel.invokeMethod(\"postException\"args); Android 端调用自定义异常上报:
private void postException(List args){String error = (String)args.get(0);String stack = (String)args.get(1);UMCrash.generateCustomLog(stackerror); iOS端调用自定义异常上报:
if ([@\"postException\" isEqualToString:call.method
){NSString* error = arguments[0
;NSString* stack = arguments[1
;[UMCrash reportExceptionWithName:@\"Flutter\" reason:error stackTrace:stack terminateProgram:NO
; 以上就是本期干货内容的介绍 , 希望我们的技术内容可以更好地帮助开发者们解决问题 , 我们将陪伴开发者们一起进步 , 一起成长 。
作者:友盟+技术专家 彦克
本文为阿里云原创内容 , 未经允许不得转载 。
相关经验推荐
- 5G|人工智能和5G被列为2022年及以后最重要的技术趋势
- 三星|谁说小米是组装厂?相继突破14项技术,未来还要投1000亿搞研发
- 3d打印机|轮到美国被卡脖子,中国掌握一项世界顶尖技术,西方给多少也不卖
- 小米科技|骁龙888Plus强机下跌1300元,陶瓷机身+屏下摄像技术,120W快充
- 清华大学|挚听32通道智能助听器,清华专利技术,支持智能验配
- OPPO|用信号充电?OPPO公布新技术,苹果该反思了
- 机器人|高端制造高歌猛进,中国要在机器人技术领域杀出一条血路!
- AMD|AMD疯狂自抽:4GB新卡引发大量吐槽,技术文章删了又发
- TCL|TCL电视屡获市场认可,以技术实力持续深化品牌影响力
- 华为|为什么外国人买海尔也不买格力?董明珠不是说掌握核心技术吗?