我正在编写一个在所有活动中都需要连接位置客户端的应用程序。如何管理客户的状态?
我想只调用mLocationClient.connect()
一次以避免麻烦,并且应该能够在应用程序停止时删除位置更新/断开连接。
如果我已在所有活动中保持位置客户端连接,假设我已在启动屏幕Activity
中连接到该客户端?
这里出现的另一个问题是,当我恢复暂停的应用程序(而非娱乐)时,应用程序不会以启动画面开始。在这种情况下如何保持连接?
提前致谢。
答案 0 :(得分:4)
您需要的是bound service:这些服务仅在客户端(如您的某项活动)与之相连时才会生效。这允许您拥有共享状态(单个连接的位置客户端),同时仍确保您正确连接/断开连接。
在这种情况下,任何位置感知活动都将绑定到该服务。当第一个活动(例如,您的启动画面活动)绑定到该服务时,该服务将启动并连接到Google Play服务。然后,您的服务Binder
将允许其LocationClient
访问任何已连接的活动。当您在活动之间移动时,每个活动将依次绑定到服务,并能够获取当前位置数据,并且每个数据都会被销毁。
当用户退出您的应用程序时(即最后一项活动被销毁),该服务将自动停止,允许您断开与Google Play服务的连接。
只要您从需要位置数据的每个活动绑定到服务,最初哪个活动启动服务并不重要:如果需要,服务就会连接。