【问题标题】:Android time lag in network responseAndroid网络响应时间滞后
【发布时间】:2019-04-28 15:50:06
【问题描述】:

我从两个不同的网络调用中获取一个数据库的数据。一个响应需要 5 秒,另一个需要 15 秒。现在,条件是只有在我的内存中从两个网络调用中准备好整个数据集后,我才能向用户呈现数据。 所以, 1)我该如何处理这个(15-5 = 10秒)时间滞后? 2)我必须同时向用户显示一些数据。在我将整个数据集准备好在内存中之前,我不能将它们留空。

【问题讨论】:

  • 你能澄清你的问题吗?您究竟在寻求什么帮助,以某种方式减少时间延迟或优雅地处理异步响应?
  • @Mladen 我已经编辑了这个问题。请看一看。
  • 由于这仍然是一个过于宽泛的问题,我将尝试注释掉几个相关的主体。如果需要,请查看答案并评论其他问题
  • @DharitParmar:API 调用需要 15 秒才能得到响应,这很奇怪。也许您可以更早地调用所需的功能并使其准备就绪。即使用户没有选择该选项,您也可以下载并将其保存在应用程序数据库中,如果用户去了那里,您可以添加一个选项来刷新数据,同时用户可以看到较早的数据。

标签: android retrofit rx-java retrofit2 android-networking


【解决方案1】:

从用户体验的角度来看,您说应该尽早向用户展示一些数据是绝对正确的。您应该在加载第一个请求后立即用一些数据填充结果列表,并在第二个请求解决后用其他数据填充它。您应该肯定想在加载仍在进行时显示加载指示器! Material Design Guidelines 中对进度指标有很好的解释。

我刚刚注意到您使用retrofitrx-java 标签标记了这个问题。使用这些,很容易等待两个请求完成并编写随后执行的代码。您可以使用zip methodRxJavaZip 将占用多个 Observables 和:

"返回一个 Observable,它将您选择的函数应用于 由两个(或更多)其他按顺序发出的项目的组合 Observables,这个函数的结果成为项目 由返回的 Observable 发出。”

假设您有两个基本可观察对象(两个请求中的每一个),在完成每个对象时,您填写数据集(可能是RecyclerView's adapter??),并且在两者都完成后(zip 的可观察对象)隐藏一个进度加载指示器。

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 2020-02-04
    • 2020-12-27
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多