【问题标题】:Are location request made before the Google Api Client is connected enqueued?是否在连接 Google Api 客户端之前发出位置请求?
【发布时间】:2016-09-09 13:49:57
【问题描述】:

我想知道如果我在连接Google Api客户端之前发出位置请求,该请求会在客户端连接后排队执行吗?

来自谷歌Android培训的Receiving Location Updates,好像没有:

在请求位置更新之前,您的应用必须连接到位置服务并发出位置请求。有关更改位置设置的课程向您展示了如何执行此操作。一旦位置请求到位,您可以通过调用 requestLocationUpdates() 开始定期更新。在 Google API Client 提供的 onConnected() 回调中执行此操作,该回调会在客户端准备就绪时调用。

但从这个Google Android blog post看来,似乎也不是不可能:

另一个新功能是 API 调用排队,它允许您在连接 API 客户端之前调用读取方法。

如果我在连接 Google Api 客户端之前调用以下命令,我会收到位置更新吗?

LocationServices.FusedLocationApi.requestLocationUpdates(
    mGoogleApiClient,
    mLocationRequest,
    this);

其中thisLocationListener

谢谢。

【问题讨论】:

    标签: android api location google-play google-play-services


    【解决方案1】:

    我在研究中发现了Transmitting Network Data Using Volley,它也可能对您有所帮助。

    Volley 提供以下好处:

    • 网络请求的自动调度。
    • 多个并发网络连接。
    • 使用标准 HTTP 缓存的透明磁盘和内存响应缓存 连贯性。
    • 支持请求优先级。
    • 取消请求 API。您可以取消单个请求,也可以 设置要取消的请求块或范围。
    • 易于自定义,例如重试和退避。
    • 强排序,可以轻松正确地填充您的 UI 从网络异步获取的数据。
    • 调试和跟踪工具。

    有了这个,您可以选择管理如何处理位置请求的排队。您可以使用称为Volley.newRequestQueue 的便捷方法设置请求队列以提供您自己的自定义行为。

    如果您只需要发出一次性请求并且不想离开线程池,您可以在任何需要的地方创建 RequestQueue 并在您的响应或错误出现后调用 RequestQueue 上的 stop()返回,使用 Volley.newRequestQueue() 方法。

    Setting up a RequestQueue 需要以下两件事来完成它的工作:

    1. 执行请求传输的网络
    2. 用于处理缓存的缓存

    文档中给出了一个 sn-p,它显示了设置 RequestQueue 所涉及的步骤。

    除了那个 sn-p 之外,这篇 SO 帖子 - How do I use the Volley network request queue? 也可能会为您提供有关其实施方式的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 2021-11-08
      • 2016-01-31
      • 2015-10-15
      • 2015-08-14
      • 1970-01-01
      • 2012-08-15
      相关资源
      最近更新 更多