【问题标题】:Android Asynchronous Http Client & Configuration ChangesAndroid 异步 Http 客户端和配置更改
【发布时间】:2014-08-21 20:24:54
【问题描述】:

我正在尝试找出处理这种情况的最佳方法。

假设我向我的 API 发送了一个 GET 请求。 在它完成之前,我旋转设备。 现在我不再收到回复,因为我的活动已被销毁并重新创建。

在这种情况下我应该怎么做?

这是我正在使用的库 https://github.com/loopj/android-async-http

【问题讨论】:

  • 你坚持使用那个库吗?尝试另一种为您处理这些问题的方法!
  • @mmlooloo 你有什么建议吗?我有兴趣:)
  • @mmlooloo 这看起来也可以替代universal-image-loader,由谷歌维护。 :D
  • 是的,您也可以使用 json 请求和响应,并使其使用 Gson 和许多其他增强功能。
  • @mmlooloo 我看不到 Volley 如何解决轮换问题。

标签: android asynchronous configuration


【解决方案1】:

我将简要回答,以便您可以进一步使用这些想法。 使用 volley 的第一件事是创建 Singleton Request Queue,在 Google 站点上它会向您展示如何做到这一点。

volley 如何处理您的请求?

volley 将您的请求放入队列。默认情况下,它使用 5 个线程。 4 个线程的职责是将您的请求发送到服务器,另一个负责从请求队列中读取您的请求。 volley 还使用磁盘缓存。单线程将您的请求从请求队列中取出,并通过内部缓存进行检查。如果它的响应在缓存 volley 中,则不要发出任何 Internet 请求,而只是从内存中返回结果。当新的响应到来时,凌空检查头文件,如果它可以缓存您的响应(服务器允许缓存响应),它会缓存响应并将其保存到磁盘中。所有这些故事都发生在工作线程中。那么当你的活动被破坏时会发生什么?如果您的旧请求的响应到达 volley 缓存它们,如果您要求它从内存中获取 url volley 读取并且不向服务器发送任何请求。如果它已经发送了您的请求,那么当您提出新请求时,它会再次检查它并发现您的响应在航班上,因此凌空不再请求。但是,如果您想在活动破坏时请求一些新的东西,只需取消 onDestroy() 中的旧请求即可快速获得新结果,因为在这种情况下,齐射取消所有旧请求并且不会为您提供任何旧结果。凌空就是这样!!

【讨论】:

  • 好的,如果我说获取列表并旋转屏幕。我重新发送请求,Volley 将检测到重复的请求并给我缓存的响应。如果我在 POST 请求中怎么办?
  • volley 缓存所有响应,您再次发送您的发布请求,如果 volley 已经保存了刚刚从内存中读取的内容,则等待返回结果。
  • 好的。我要玩弄它。完成一些测试后,我会将这个答案标记为正确。
  • 非常好,如果您遇到任何问题或发现我的答案不正确,请告诉我向您学习。
  • 到目前为止,所有示例都显示了包含 GET/POST 请求的实际 URL 的 Activity 类。这真的很明智吗?我更喜欢有一个单独的类来包含所有网络代码,然后我使用像'loadAllData()'这样的方法。这样,如果我需要更改代码与 API 交互的方式,我只需在一个类中更改它。有什么想法吗?
【解决方案2】:

我最终使用了一个无头片段。如果这不是一个好主意,请告诉我;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2017-12-15
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多