Как записать подробности аварии из CustomActivityOnCrash - PullRequest
0 голосов
/ 02 июля 2018

Мы используем библиотеку 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");
    }
}
...