NativeScript Hybrid移动应用程序:跟踪/捕获崩溃

时间:2018-05-08 18:50:27

标签: nativescript angular2-nativescript crash nativescript-angular nativescript-plugin

我正在构建一个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.androidargs.ios中的任何内容。

如果上述方法不正确,那么有人可以帮我解决这个问题吗?

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

application.onUncaughtError在撞车事故中可能会有95-98%的时间被击中;它非常可靠。我已经看到应用程序崩溃而没有任何通知它只是噗,但我不确定任何报告系统可以处理那个。

我这样做是因为在app启动期间我注册了几件事:

  1. 我创建了一个global.error函数;这用于需要发送错误以便远程记录的任何内容(如try / catch,promise / catch)。所以我的代码库中的任何地方都可以global.error(theError);进行处理;这样我就不必担心在发生错误时尝试加载或需要的东西,因为这可能会导致其他错误。
  2. 我使用onUncaughtError事件来捕获通常没有捕获的任何内容,然后通知用户发生了错误并退出了应用程序。 (在这种情况下,建议不要尝试恢复,因为您不知道从哪里抛出错误...)
  3. 如果我使用工作线程,当我启动一个工作器时,我注册worker.onerror以将其数据转发到主线程global.error函数并且我有来自工作者版本的特定消息{1}}将错误发送回主线程。这样,如果worker本身调用global.error,那么该消息将被传递回主线程,然后传递给主线程上的global.error,它正确处理所有事情。
  4. 这种技术可以让我捕获几乎所有可能发生的错误。主global.error函数和global.error都使用我构建的简单报告库,如果设备在线,它会将所有数据报告回我的一台服务器。如果设备处于脱机状态,则可以选择将数据保存到报告文件中以便稍后上传;或者只是忽略它。

    它还有安全检查来验证错误不是网络错误(我们不希望错误报告进入循环,即尝​​试报告错误导致错误,然后尝试报告错误;因此,如果它是某种类型的网络错误;它将忽略这些错误。)