我们正在使用Ereza CustomActivityOnCrash库来处理Android应用程序中的意外问题。它的活动提供了一些调试输出,我们在开发和测试版本中启用了这些输出,但在生产版本中禁用了这些输出。另外,我们想在后台记录有关崩溃详细信息(日志条目,堆栈跟踪,错误详细信息)的信息。
CustomActivityOnCrash
可以调用事件监听器,听起来很方便。我想在我们的日志记录服务中实现该接口,但是我不明白如何以这种方式访问崩溃活动中的现有信息。哪个令我感到困惑,原因不是那自然的期望吗?
基本上,我需要从未传递任何内容的事件侦听器方法访问android活动对象的公共方法。如何在处理程序方法中访问该活动?以及如何获得导致崩溃的活动的意图,这是崩溃活动在其提供的访问其所提供的现有信息的公共方法中期望的参数?库文档中给出的示例以及我可以在Internet上找到的示例都很简单,它们仅转储示例字符串,而不是库收集的实际数据。
这听起来与我的直觉相反。这就是为什么我认为我通常会在这里错过一些东西的原因。也许有人给我一个简短的提示,让我再次走上正轨。谢谢!
这是我想象中的LogService实现的基础:
...
import cat.ereza.customactivityoncrash.CustomActivityOnCrash;
...
public class LogService
implements CustomActivityOnCrash.EventListener {
private static LogService instance;
...
public void log(LogLevel level, String message) {
....
}
public void logCrashDetails(String activityLog, String stackTrace, String errorDetails) {
String message = String.format(
"--- CRASH REPORT ---\n\n-- Activity log:\n%s\n\n- Stack trace:\n%s\n\nError details:\n%s",
activityLog,
stackTrace,
errorDetails);
log(LogLevel.ERROR, message);
}
....
// CustomActivityOnCrash EventListener interface
@Override
public void onLaunchErrorActivity() {
log(LogLevel.INFO, "COAC: app crashed");
logCrashDetails(
// CustomActivityOnCrash.getActivityLogFromIntent(...some intent...),
// CustomActivityOnCrash.getStackTraceFromIntent(...some intent...),
// CustomActivityOnCrash.getAllErrorDetailsFromIntent(...some intent...)
);
}
@Override
public void onRestartAppFromErrorActivity() {
log(LogLevel.INFO, "COAC: app restarted");
}
@Override
public void onCloseAppFromErrorActivity() {
log(LogLevel.INFO, "COAC: app closed");
}
}