Предполагается, что RuntimeExceptions указывает на ошибку программирования, и я хочу, чтобы мое приложение вылетало, когда что-то внутри моих наблюдаемых выдает RuntimeException.
Как лучше всего это сделать? Вот сейчас обдумываю это решение (это Kotlin, но надеюсь понятно)
fun <T> Observable<T>.subscribeCrashOnRuntimeException(onNext: (T) -> Unit, onError: (Throwable) -> Unit) {
this.subscribe({
onNext(it)
}, { e ->
if (e is RuntimeException) {
throw e
} else {
onError(e)
}
})
}
fun usageExample() {
val observable = Observable.just(1)
observable.subscribeCrashOnRuntimeExceptions(
{ next -> Log.d("TAG", "next: $next") },
{ e -> Log.d("TAG", "error: $e") }
)
}
Но у меня есть сомнения по этому поводу. Например, с помощью этого решения трудно время от времени «поймать» определенные исключения RuntimeException. Возможно, есть известный способ справиться с ситуацией, которую я просто не знаю, как гуглить?
onErrorResumeNext
, где вы можете решить, что делать с ошибкой. - person akarnokd   schedule 19.12.2016RuntimeExceptions are supposed to indicate programming error
- не обязательно. Является ли отсутствие файла ошибкой программирования? Разорвано сетевое соединение? В большинстве случаев вы явно не хотите сбоя, а смягчите или повторите попытку. - person Tassos Bassoukos   schedule 19.12.2016