我正在为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之后设置( )被称为,对吗?是否有其他缺少的机制可以正确处理此问题,以便仅使用我的自定义发件人而不是默认发件人发送待处理的报告?
答案 0 :(得分:0)
不幸的是,看起来你是对的。
现在值得重新审视ACRA配置GoogleDocs不再是有效目标。一些更适合注入CustomSenders的东西。
修改ACRA以执行您想要的操作应该太难了。可能是对ErrorReport#setDefaultReportSenders的一个小改动。我肯定会感激地接受拉动请求。
答案 1 :(得分:0)
我意识到这个答案有点迟了。然而,这是我最后进行一些搜索的地方。
您可以使用自定义发件人通过此初始化发送待处理报告:
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
并抛出ReportSenderException
。 RuntimeException
和ReportSenderException
都会导致ACRA的日志输出相同,这不是最方便的解决方案。