首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有最小延迟的RxJava发射项

具有最小延迟的RxJava发射项
EN

Stack Overflow用户
提问于 2018-05-04 18:04:40
回答 1查看 842关注 0票数 1

我有UserConfig,我想在闪屏时下载。

代码语言:javascript
复制
class UserManager {
    Single<UserConfig> loadConfig()
}

下载UserConfig后,用户将被重定向至下一个屏幕。我这样做:

代码语言:javascript
复制
@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短)。

EN

回答 1

Stack Overflow用户

发布于 2019-04-24 03:16:11

我用kotlin扩展函数解决单一类型的问题。此延迟与错误的工作方式类似

代码语言:javascript
复制
/**
 * 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 }
    )
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50172377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档