Я использую вспомогательные классы с логикой повтора, которая используется в моем приложении.Мне было интересно, есть ли способ объединить классы обработчика и обратного вызова в один вместо двух разных классов, один для обратного вызова и один для обработчика.Вот мой код следующим образом: Retryhandler:
abstract class RetryHandler(private val totalRetries: Int = 0, private val delayMillis : Long = 0) : Handler() {
private var retryCount: Int = 0
fun retry(): Boolean {
return if (retryCount++ < totalRetries) {
if (delayMillis > 0) {
postDelayed({ onRetry(retryCount) }, delayMillis)
} else {
onRetry(retryCount)
true
}
} else false
}
abstract fun onRetry(retryCount: Int)
}
Retrycallback:
abstract class RetryableCallback(totalRetries: Int = 0, delayMillis : Long = 0)
: RetryHandler(totalRetries, delayMillis), MyCallback {
override fun handleTransactionCompleted() {
if (!onCompleted()) {
if (!retry()) {
onFailed(null)
}
}
}
override fun handleTransactionFailed(e: MyException?) {
if (!retry()) {
onFailed(e)
}
}
abstract fun onCompleted(): Boolean
abstract fun onFailed(e: MyException? = null)
}
Вот как я использую их в своем коде:
private val newCallback = object: RetryableCallback(5, 5000) {
override fun onRetry(retryCount: Int) {
....}
override fun onCompleted(): Boolean {
}
}
Есть идеи?