Я не понял, как именно использовать addGlobalErrorListener(EasyThread.ErrorListener err)
.
Давайте go к моему коду в init()
:
// Pro only feature (disabled)
Log.bindCrashProtection(false);
// Custom EDT error handling
CN.addEdtErrorHandler(e -> {
Log.p("\n\n--- EDT CRASH REPORT ---\n", Log.ERROR);
Log.e((Throwable) e.getSource());
Server.sendLogAsync();
Dialog.show("EDT Exception", "Please be patient, report the following ERROR to the developers and then kill the app:\n\n" + e.getSource().toString(), null, null);
});
// Custom EasyThread error handling
EasyThread.addGlobalErrorListener((t, c, e) -> {
CN.callSerially(() -> {
Log.p("\n\n--- Easy Thread CRASH REPORT ---\n", Log.ERROR);
Log.p("Thead name: " + Thread.currentThread().getName());
Log.e(e);
Server.sendLogAsync();
Dialog.show("EDT Exception", "Please be patient, report the following ERROR to the developers and then kill the app:\n\n" + e.getMessage(), null, null);
});
});
Код для тестирования EDT:
CN.callSerially(() -> {
throw new IllegalStateException("Example of IllegalStateException in EDT");
})
Код для тестирования EasyThread:
thread.run(() -> {
throw new IllegalStateException("Example of IllegalStateException in EasyThread");
});
Как вы можете догадаться, Server.sendLogAsync()
- это моя собственная реализация Log.sendLogAsync()
. Более того, я отключил защиту cra sh, потому что я хочу заставить тестеров убивать приложение при возникновении неуправляемого исключения.
Мои вопросы:
Это код правильный? Я отмечаю, что он работает так же, как и я, за исключением Android и iOS, но Simulator перестает отвечать, когда возникает исключение внутри EasyThead. Более того, Симулятор не показывает диалоговое окно при обработке исключения EasyThread, в то время как Android и iOS показывают его.
Каково использование EasyThread t
и из <T> callback
в качестве параметров метода onError(EasyThread t, T callback, Throwable error)
из EasyThread.ErrorListener<T>
? Что в данном случае T
?
Спасибо за пояснения