ACRA 在不退出应用程序的情况下发送报告

ACRA send report without exiting app

刚开始使用 ACRA。当应用程序崩溃时,它会向我的服务器发送报告。一切都很好。

但也有一些例外情况我可以捕获并让用户保持问题不出错——比如使用默认值。但我想在不打扰用户的情况下获得错误报告。但是当我这样做时:

ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.putCustomData("test", "value");
errorReporter.handleSilentException(null);

应用程序关闭。我首先尝试抛出一些错误(测试目的),我希望发送 null 可以阻止应用程序停止 - 我错了。

有没有办法在不退出应用程序的情况下使用ACRA发送错误报告?只是以为我有它,但是

ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.putCustomData("test", "value");
errorReporter.handleException(null, false); // false is endApplication param, `null` seems to result in a NullPointerException

这也会关闭应用程序(没有来自 ACRA 的额外异常):

ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.putCustomData("test", "value");
errorReporter.handleException(new RuntimeException("message"), false); // tried `true` also, just in case

同时关闭应用程序

更新:
(1) LogCat 没有显示堆栈跟踪。
(2) 在看错误报告的时候,我的目光落在了

"DUMPSYS_MEMINFO":"Permission Denial: can't dump meminfo from from pid=1416, uid=10048 without permission android.permission.DUMP\n"

试图将 android.permission.DUMP 添加到 androidmanifest.xml,但我得到 Permission is only granted to system apps。退出应用程序的原因?变通?它获取我需要的所有信息(以及更多)...

事实证明,上面的代码是正确的。问题在于我覆盖了 ErrorReporter:

new HttpSender(org.acra.sender.HttpSender.Method.PUT, org.acra.sender.HttpSender.Type.JSON, null) {
            @Override
            public void send(final Context context, final CrashReportData report) throws ReportSenderException {
                super.send(context, report);
                respondAsIfCrashing(); // not the real method name
            }
        };

应用程序没有崩溃,它只是看起来崩溃了,因为 respondAsIfCrashing 方法。

警告 DUMPSYS_MEMINFO":"Permission Denial: can't dump meminfo from from pid=1416, uid=10048 without permission android.permission.DUMP 显然不是崩溃的原因...(也许只是没有写入设备?)

所以使用

ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.handleException(new RuntimeException("message"), false); 

足够