nativescript - NativeScript 混合移动应用程序:跟踪/捕获崩溃
问题描述
我正在构建一个 NativeScript 移动应用程序,除此之外,我正在捕获用于分析目的的其他内容,我需要捕获可能包含错误/崩溃原因的“应用程序崩溃” 。
我遇到了这个 SO 帖子,但它是在一个关于如何不让应用程序崩溃的问题的回答中。建议使用以下方法捕获崩溃事件:
var application = require("application");
application.on(application.uncaughtErrorEvent, function (args) {
if (args.android) {
// For Android applications, args.android is an NativeScriptError.
console.log("NativeScriptError: " + args.android);
} else if (args.ios) {
// For iOS applications, args.ios is NativeScriptError.
console.log("NativeScriptError: " + args.ios);
}
});
如果我按照上述方法进行,那么我有以下问题。如果有人可以确认这是否意味着每次应用程序崩溃都会生成此application.uncaughtErrorEvent
事件,将不胜感激?我可以依靠它吗?如果这是真的,那么也许我可以对我的后端进行 REST 调用并存储日期、时间以及在args.android
or中的任何内容args.ios
。
如果上述方法不正确,那么有人可以帮助我如何去做吗?
非常感谢任何帮助。谢谢!
解决方案
在application.onUncaughtError
碰撞期间可能会在 95-98% 的时间内被击中;它非常可靠。我已经看到应用程序在没有任何通知的情况下崩溃了,但我不确定任何报告系统都可以处理那个问题。
我这样做的方式是在应用程序启动期间注册几件事:
- 我创建了一个
global.error
函数;这用于需要发送错误以进行远程记录的任何事物(如 try/catch、promise/catch)。所以在我的代码库中的任何地方我都可以做 aglobal.error(theError);
并且它会被处理;这样我就不必担心在发生错误时尝试加载或要求东西,因为这可能会导致其他错误。 - 我使用该
onUncaughtError
事件来捕获通常未捕获的任何内容,然后通知用户发生错误并退出应用程序。(在这种情况下,不建议尝试恢复,因为您不知道错误是从哪里引发的......) - 如果我使用工作线程,当我启动一个工作线程时,我会注册将
worker.onerror
其数据转发到主线程global.error
函数,并且我有来自工作线程版本的特定消息,global.error
它将错误发送回主线程。这样,如果工作人员自己调用 global.error ,则该消息将传递回主线程,然后传递给主线程上的 global.error ,它会正确处理所有内容。
这种技术让我能够捕捉到几乎所有可能发生的错误。主要global.error
功能和onUncaughtError
两者都使用我构建的简单报告库,如果设备在线,它将所有数据报告回我的一台服务器。如果设备处于离线状态,它可以选择将数据保存到报告文件以供以后上传;或者只是忽略它。
它还具有安全检查以验证错误不是网络错误(我们不希望错误报告进入循环,即尝试报告错误会导致错误,然后尝试报告错误;所以在事件是某种类型的网络错误;它会忽略那些。)
推荐阅读
- flutter - Flutter Rive - 在状态机中更改数字输入时动画不会改变
- javascript - 如何隐藏删除按钮
- excel - 后期绑定字典 VBA 的问题
- android - 将多操作系统引擎插件添加到 Eclipse 2021-06
- python - 使用多处理在进程之间进行交互?
- python-sphinx - 狮身人面像链接到静态文件
- javascript - 如何使用 jQuery 获得跨度的这个值?
- python - scikit learn Tfidf_Vectorizer函数如何计算TF-IDF?因为我通过手动计算得到了不同的结果
- c++ - 如何使用 Arduino 步进电机前后移动?
- python - 如何在 BS4 中添加嵌套的 DIV