android - 有没有更好更简单的方法来优化 kotlin 中的辅助回调和处理程序代码?
问题描述
我正在使用带有重试逻辑的辅助类,它在我的应用程序中使用。我想知道是否有一种方法可以将处理程序和回调类合并为一个,而不是使用 2 个不同的类,一个用于回调,一个用于处理程序。这是我的代码如下: 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)
}
重试回调:
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 {
}
}
有任何想法吗 ?
解决方案
好吧,只要我不完全理解目的,就这样说:
abstract class RetriableCallbackHandler(private val totalRetries: Int = 0, private val delayMillis : Long = 0) : Handler(), MyCallback {
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)
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)
}
推荐阅读
- python - Multiprocessing Pool.apply 执行 n-1 次
- macos - 在mac上使用ANT生成带有自签名证书的包
- sql - 使用 CHARINDEX 传递给 RIGHT 函数的长度参数无效
- python - 在尊重日期时间的同时计算滚动分组的乘积
- c++ - 回文字符串问题:为什么我必须放 +1 而不是 -1 才能使这段代码工作?
- java - java - 如何按“/”分割并存储为像java中的树一样分层?
- php - 如何在php中放置php
- php - PHP 变量未填充到表单上的 HTML datetime-local 字段中
- bash - 如何让 Bash 脚本引用本地文件
- xslt - 使用节点和属性上的 group by 从 xml 到 xml 的 xslt 转换