我有UserConfig
,我想在闪屏时下载。
class UserManager {
Single<UserConfig> loadConfig()
}
下载UserConfig
后,用户将被重定向至下一个屏幕。我这样做:
@Override
public void onResume(boolean isNewView) {
subscriptions.add(
userManager.loadConfig().subscribe(config -> {
applyConfig(config);
launchActivity(HomeActivity.class);
}, error -> {
//some error handling
})
);
}
但是,我想显示的闪屏至少1秒。(如果加载时间少于1秒,则添加额外的延迟)
我认为.delay()
,.delaySubscription()
不适用于我的情况,因为他们会延迟每个请求(无论它是否比1短)。
发布于 2019-04-24 03:16:11
我用kotlin扩展函数解决单一类型的问题。此延迟与错误的工作方式类似
/**
* sets the minimum delay on the success or error
*/
fun <T> Single<T>.minDelay(time: Long, unit: TimeUnit, scheduler: Scheduler = Schedulers.computation()): Single<T> {
val timeStart = scheduler.now(TimeUnit.MILLISECONDS)
val delayInMillis = TimeUnit.MILLISECONDS.convert(time, unit)
return Single.zip(
Single.timer(time, unit, scheduler),
this.onErrorResumeNext { error: Throwable ->
val afterError = scheduler.now(TimeUnit.MILLISECONDS)
val millisPassed = afterError - timeStart
val needWaitDelay = delayInMillis - millisPassed
if (needWaitDelay > 0)
Single.error<T>(error)
.delay(needWaitDelay, TimeUnit.MILLISECONDS, scheduler, true)
else
Single.error<T>(error)
},
BiFunction { _, t2 -> t2 }
)
}
https://stackoverflow.com/questions/50172377
复制相似问题