ACRA 自定义发件人挂起报告



我正在为 Acra (https://github.com/ACRA/acra/wiki/AdvancedUsage#implementing-your-own-sender) 设计一个自定义发送器,我正在尝试确定 ACRA 在没有可用网络时的行为方式。正如我从这个问题(https://code.google.com/p/acra/issues/detail?id=11)中了解到的那样,如果没有互联网连接,ACRA将存储一个待处理的报告,并在下次调用ACRA.init()时将其发送出去(大概是下一个应用程序启动)。我的问题是这适用于我的自定义发件人吗?

ACRA.init(this);
ACRA.getErrorReporter().setReportSender(new MyCustomSender());

这是 ACRA 指南中描述的一般代码结构,但在查看问题 11 中的代码和描述时,我相信这不会使用我的自定义发送器,因为它仅在调用 ACRA.init() 后设置,对吧?我是否缺少另一种机制可以正确处理此问题,以便仅使用我的自定义发件人而不是默认发件人发送待处理的报告?

我确实意识到我这个答案有点晚了。然而,这就是我最终进行一些搜索的地方。

您可以通过以下初始化使用自定义发件人发送待处理报告:

private void initACRA () {
    final ReportsCrashes rc = this.getClass()
            .getAnnotation(ReportsCrashes.class);
    if (rc == null) {
        return;
    }
    ACRA.init(this, new ACRAConfiguration(rc), false);
    ErrorReporter reporter = ACRA.getErrorReporter();
    reporter.setReportSender(new MyCustomSender());
    reporter.checkReportsOnApplicationStart();
}

只需确保在没有网络连接/发送失败的情况下在自定义发送器中抛出ReportSenderException。如果报告未发送且报告文件 ( *-approved.stacktrace ) 仍然消失,请确保捕获任何RuntimeException并抛出ReportSenderExceptionRuntimeExceptionReportSenderException都会导致ACRA的相同日志输出,这不是最方便的解决方案。

不幸的是,

看起来你是对的。

现在值得

重新审视ACRA配置,因为GoogleDocs不再是一个有效的目标。更适合注入自定义发件人的东西。

修改 ACRA 以执行您想要的操作应该太难了。可能是对 ErrorReport#setDefaultReportSenders 的一个小改动。我相信拉取请求将被感激地接受。

相关内容

  • 没有找到相关文章

最新更新