我正在构建NativeScript移动应用程序,除其他目的外,我还出于分析目的而捕获该应用程序,我需要捕获“应用程序崩溃” ,可能带有崩溃的错误/原因。
我遇到了this SO post,但它的问题是如何不使应用程序崩溃。建议以下捕获崩溃事件:
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
或args.ios
中的任何内容。如果以上方法不正确,那么有人可以帮我怎么做吗?
非常感谢您的帮助。谢谢!
最佳答案
崩溃期间application.onUncaughtError
可能会被命中95-98%的时间;这是非常可靠的。我已经看到该应用程序崩溃,而没有任何通知,它简直是令人毛骨悚然,但是我不确定任何报告系统都能处理该崩溃。
我这样做的方法是在应用程序启动期间注册了几件事:
global.error
函数;它用于需要发送错误以进行远程记录的任何内容(例如try / catch,promise / catch)。因此,在我的代码库中的任何地方,我都可以做一个global.error(theError);
,它将被处理;这样,当发生错误时,我不必担心尝试加载或需要东西,因为这可能会导致其他错误。 onUncaughtError
事件捕获通常无法捕获的任何内容,然后通知用户发生了错误并退出了应用程序。 (在这种情况下,不建议尝试恢复,因为您不知道错误是从哪里抛出的。。。)worker.onerror
以将其数据转发到主线程global.error
函数,并且我从global.error
的工作版本中收到一条特定消息,该错误会将错误发送回主线程。这样,如果工作程序本身调用global.error,则该消息将被传递回主线程,然后传递到主线程上的global.error,后者可以正确处理所有事务。 这种技术使我能够捕获几乎所有可能发生的错误。主要
global.error
函数和onUncaughtError
都使用我构建的简单报告库,如果设备处于在线状态,该报告库会将所有数据报告回我的一台服务器。如果设备处于脱机状态,则可以选择将数据保存到报告文件中,以便以后上传;或忽略它。它还具有安全性检查,以验证错误不是网络错误(我们不希望错误报告进入循环,即,尝试报告错误会导致错误,然后尝试报告错误;因此请参见如果这是某种类型的网络错误;它将忽略这些错误。)
关于nativescript - NativeScript混合移动应用程序:跟踪/捕获崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50240445/