Мы используем библиотеку Ereza CustomActivityOnCrash для решения непредвиденных проблем с нашим приложением для Android. Это действие предлагает некоторый отладочный вывод, который мы включаем в разрабатываемые и тестовые сборки, но отключаем в производственных сборках. Кроме того, мы хотим записать эту информацию о деталях сбоя (записи журнала, трассировки стека, подробности ошибок) в фоновом режиме.
CustomActivityOnCrash
предлагает вызывать слушателей событий, что звучит удобно. Я хотел реализовать интерфейс в нашей службе ведения журналов, однако я не понимаю, каким образом я могу получить доступ к существующей информации в процессе сбоя таким образом. Что меня озадачивает, ведь это не естественное ожидание?
По сути, мне нужен доступ к открытым методам объекта активности Android из метода прослушивателя событий, который ничего не передает. Как я могу получить доступ к этой деятельности в методе обработчика? И как я могу получить намерение действия, приводящего к падению, которое является аргументом, который ожидает действие сбоя в тех открытых методах, которые оно предлагает для доступа к существующей информации, которую оно предлагает? Примеры, приведенные в документации к библиотекам, и примеры, которые я смог найти в Интернете, тривиальны, они содержат только строки примеров, а не фактические данные, собранные библиотекой.
Все это звучит для меня противоречиво. Вот почему я думаю, что я здесь вообще что-то упускаю. Может быть, у кого-то есть короткий намек на то, чтобы снова привести меня в порядок. Спасибо!
Вот основы реализации 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");
}
}