【问题标题】:Should you connect and disconnect to Google Play Services in each activity?您是否应该在每个活动中连接和断开与 Google Play 服务的连接?
【发布时间】:2014-06-16 01:01:51
【问题描述】:

我正在编写一个应用程序,它在所有活动中都需要一个连接的位置客户端。客户端的状态如何管理?

我想只调用一次mLocationClient.connect() 以避免麻烦,并且应该能够在应用程序停止时删除位置更新/断开连接。

假设我已在初始屏幕Activity 中连接到位置客户端,如何在所有活动中保持连接?

这里出现的另一个问题是,当我恢复暂停的应用程序(而不是重新启动)时,应用程序不会以初始屏幕启动。在这种情况下如何保持连接?

提前致谢。

【问题讨论】:

    标签: android google-play-services state location-client


    【解决方案1】:

    您需要的是bound service:这些服务仅在客户端(如您的一项活动)连接到它时才有效。这允许您拥有共享状态(单个连接位置客户端),同时仍确保您正确连接/断开连接。

    在这种情况下,任何位置感知活动都会绑定到服务。当第一个活动(例如,您的启动屏幕活动)绑定到服务时,服务将启动并连接到 Google Play 服务。然后,您的服务的Binder 将允许访问其LocationClient 以访问任何连接的活动。当您在活动之间移动时,每个活动都会依次绑定到服务并能够获取当前位置数据,并且每个活动都会被销毁。

    当用户退出您的应用程序(即最后一个活动被销毁)时,该服务将自动停止,从而允许您断开与 Google Play 服务的连接。

    只要您从需要位置数据的每个 Activity 绑定到服务,最初启动服务的 Activity 并不重要:服务只会在需要时连接。

    【讨论】:

    • 非常感谢您的见解。我会尝试按照你的方法,看看它是否对我的情况有帮助。
    • 我意识到这是要走的路,但我很难找到正确的方法。因为连接到 googleplayservices 并获取位置有一个小的延迟,所以我想我需要在该服务可用时广播该位置。有什么可以推荐的参考吗?
    • 一种简单的方法是让您的Binder 提供registerLocationListenerunregisterLocationListener 方法,以便您的Service 可以将位置发送给任何附加的客户(只需确保取消注册在您解除与服务的绑定之前)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2017-12-24
    • 2018-02-15
    • 1970-01-01
    • 2018-05-12
    • 2016-12-10
    相关资源
    最近更新 更多