NativeScript 混合移动应用程序:Tracking/Capturing 次崩溃

NativeScript Hybrid Mobile App: Tracking/Capturing Crashes

我正在构建一个 NativeScript 移动应用程序,除此之外,我正在为分析目的捕获其他内容,我需要 捕获 "app crashes" 可能 errors/reasons 它崩溃了。

我遇到了 ,但它是在回答关于如何不让应用程序崩溃的问题时遇到的。建议使用以下方法来捕获崩溃事件:

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.

中的任何内容

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

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

application.onUncaughtError 在崩溃期间可能有 95-98% 的时间被击中;这是非常可靠的。我已经看到应用程序在没有任何通知的情况下崩溃了,但我不确定任何报告系统都能处理这个问题。

我的方法是在应用程序启动期间注册一些东西:

  1. 我创建了一个global.error函数;这用于需要发送错误以远程记录的任何内容(如 try/catch、promise/catch)。所以在我的代码库中的任何地方我都可以做一个 global.error(theError); 并且它会被处理;这样我就不必担心在发生错误时尝试加载或要求东西,因为这会导致其他错误。
  2. 我使用 onUncaughtError 事件来捕获通常不会捕获的任何内容,然后通知用户发生错误并退出应用程序。 (在这种情况下,不建议尝试恢复,因为您不知道错误是从哪里抛出的...)
  3. 如果我使用工作线程,当我启动一个工作线程时,我会注册 worker.onerror 以将其数据转发到主线程 global.error 函数,并且我从工作线程版本中收到了一条特定消息将错误发送回主线程的 global.error。这样,如果 worker 本身调用 global.error,则该消息将传回主线程,然后传回主线程上的 global.error,后者会正确处理所有内容。

这种技术使我能够捕捉到几乎所有可能发生的错误。主要的 global.error 函数和 onUncaughtError 都使用我构建的一个简单的报告库,如果设备在线,它将所有数据报告回我的一个服务器。如果设备处于离线状态,它可以选择将数据保存到报告文件中,以便稍后上传;或者忽略它。

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