39 | 线上出现问题,该如何做好异常捕获与信息采集?
陈航
该思维导图由 AI 生成,仅供参考
你好,我是陈航。
在上一篇文章中,我与你分享了如何为一个 Flutter 工程编写自动化测试用例。设计一个测试用例的基本步骤可以分为 3 步,即定义、执行和验证,而 Flutter 提供的单元测试和 UI 测试框架则可以帮助我们简化这些步骤。
其中,通过单元测试,我们可以很方便地验证单个函数、方法或类的行为,还可以利用 mockito 定制外部依赖返回任意数据,从而让测试更可控;而 UI 测试则提供了与 Widget 交互的能力,我们可以模仿用户行为,对应用进行相应的交互操作,确认其功能是否符合预期。
通过自动化测试,我们可以把重复的人工操作变成自动化的验证步骤,从而在开发阶段更及时地发现问题。但终端设备的碎片化,使得我们终究无法在应用开发期就完全模拟出真实用户的运行环境。所以,无论我们的应用写得多么完美、测试得多么全面,总是无法完全避免线上的异常问题。
这些异常,可能是因为不充分的机型适配、用户糟糕的网络状况;也可能是因为 Flutter 框架自身的 Bug,甚至是操作系统底层的问题。这些异常一旦发生,Flutter 应用会无法响应用户的交互事件,轻则报错,重则功能无法使用甚至闪退,这对用户来说都相当不友好,是开发者最不愿意看到的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在Flutter应用开发中异常捕获与信息采集的重要性和方法。作者首先详细讲解了Flutter异常的概念,包括App异常和Framework异常,并提出了针对这些异常的捕获方式。针对App异常,作者介绍了同步异常和异步异常的捕获方式,以及使用Zone.runZoned方法集中管理异常的方法。对于Framework异常,作者介绍了自定义错误页面和FlutterError类的使用,以及如何统一处理框架异常。此外,文章还提到了异常上报的重要性,并以Bugly为例,介绍了如何实现自定义数据上报。文章还介绍了在Flutter应用中接入Bugly数据上报的具体步骤,包括Dart层接口实现、iOS接口实现和Android接口实现。通过对Bugly SDK的接口封装和权限配置,为读者提供了在Flutter应用中进行异常信息上报的详细指导。总的来说,本文内容涵盖了技术实现细节,对于开发者在实际应用开发中具有一定的指导意义。文章内容丰富,涵盖了异常捕获与信息采集的全面内容,对于开发者在应用开发过程中遇到异常问题时提供了解决思路和方法。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》,新⼈⾸单¥59
《Flutter 核心技术与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- 回眸~public class MainActivityFlutterTest extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); View flutterView = Flutter.createView(MainActivityFlutterTest.this, getLifecycle(), "route1"); setContentView(flutterView); } }老师,请问下如果用这种方式在原生中添加flutterview ,那么可以在这个原生actiivty中设置mehodChannel 吗 ,貌似MethodChannel 需要BinaryMessenger,这个怎么设置呀
作者回复: 你可以参考30篇分享的示例代码:https://github.com/cyndibaby905/27_native_view
2019-11-072 - 浣熊特工队老师,我参考您github上的代码后,在json转换出现 type 'int' is not a subtype of type 'double' 这个类型的异常时,发现FlutterError.onError回调和runZoned的onError都不执行啊,到是进了自定义的错误界面
作者回复: 检查一下其他的异常是否可以捕获
2019-10-302 - Carlo老师,我使用了Firebase Crashlytics。(通过官方插件firebase_crashlytics)但是得倒的crash stack trace根本没有用啊。(只能知道是点击ink_well 造成了crash,但是没告诉是哪个file,哪行代码) Crashlytics.crash (firebase_crashlytics.dart:50) _InkResponseState._handleTap (ink_well.dart:635) _InkResponseState.build.<fn> (ink_well.dart:711) GestureRecognizer.invokeCallback (recognizer.dart:182) TapGestureRecognizer._checkUp (tap.dart:365) TapGestureRecognizer.handlePrimaryPointer (tap.dart:275) PrimaryPointerGestureRecognizer.handleEvent (recognizer.dart:455) PointerRouter._dispatch (pointer_router.dart:75) PointerRouter.route (pointer_router.dart:102) _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (binding.dart:218) _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (binding.dart:198)
作者回复: 1.看起来是手势处理出现了冲突,可以重点检查这部分的代码 2.你这个异常堆栈是Dart的,Dart的异常是不会Crash的
2019-10-04 - 亡命之徒老师 ,想问下 flutter 开发web页面可以怎么做嘛
作者回复: 参考这篇文章:https://mp.weixin.qq.com/s/krR2XsDXvakMlZWbV-VvSg
2019-09-27 - wtsky 。老师,checkbox等类型控件,必须和statefulwidget setState方法配合使用吗
作者回复: 对,这个widget本身没有状态,需要调用方自己维护
2019-09-26 - 刘超FlutterError.onError 这个回调,只有在release模式下,才会生效,具体可看.https://github.com/flutter/flutter/issues/489722020-05-254
- IF-Processing我看咱们的示例代码中,在初始化appid时,把id放入代码里了,这样每次修改都需要修改代码,提交以及编译。flutter有没有类似配置文件的机制呢?如果没有,做一个类似Config的类,根据不同的目标环境,使用不同的配置文件,这样是否可行,有啥坑没有?2020-02-0613
- 甘陵笑笑生文字中“在完成了极光 Android SDK 的接口封装和权限配置之后”,应该是“完成了Bugly.....”2020-03-281
- 火腿Flutter在视频播放这块有没有好的解决方案? 最近去找了一些Flutter Texture的资料,感觉效率上会比Native的差很多。2019-12-26
收起评论