我正在构建一个NativeScript移动应用程序以及我为了分析而捕获的其他内容,我需要捕获&#34;应用程序崩溃&#34; 可能有错误/原因导致崩溃。< / p>
我遇到了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
中的任何内容。
如果上述方法不正确,那么有人可以帮我解决这个问题吗?
非常感谢任何帮助。谢谢!
答案 0 :(得分:3)
application.onUncaughtError
在撞车事故中可能会有95-98%的时间被击中;它非常可靠。我已经看到应用程序崩溃而没有任何通知它只是噗,但我不确定任何报告系统可以处理那个。
我这样做是因为在app启动期间我注册了几件事:
global.error
函数;这用于需要发送错误以便远程记录的任何内容(如try / catch,promise / catch)。所以我的代码库中的任何地方都可以global.error(theError);
进行处理;这样我就不必担心在发生错误时尝试加载或需要的东西,因为这可能会导致其他错误。 onUncaughtError
事件来捕获通常没有捕获的任何内容,然后通知用户发生了错误并退出了应用程序。 (在这种情况下,建议不要尝试恢复,因为您不知道从哪里抛出错误...)worker.onerror
以将其数据转发到主线程global.error
函数并且我有来自工作者版本的特定消息{1}}将错误发送回主线程。这样,如果worker本身调用global.error,那么该消息将被传递回主线程,然后传递给主线程上的global.error,它正确处理所有事情。这种技术可以让我捕获几乎所有可能发生的错误。主global.error
函数和global.error
都使用我构建的简单报告库,如果设备在线,它会将所有数据报告回我的一台服务器。如果设备处于脱机状态,则可以选择将数据保存到报告文件中以便稍后上传;或者只是忽略它。
它还有安全检查来验证错误不是网络错误(我们不希望错误报告进入循环,即尝试报告错误导致错误,然后尝试报告错误;因此,如果它是某种类型的网络错误;它将忽略这些错误。)