Android 为什么我需要一个服务来在后台获取位置更新 更新

Android 为什么我需要一个服务来在后台获取位置更新 更新,android,android-service,android-gps,Android,Android Service,Android Gps,我得到的所有答案都是“因为服务在后台运行” 这并不能回答我的问题 假设我从我的活动中调用locationManager.requestLocationUpdates,一段时间后,我的活动被销毁 locationManager如何知道我的活动已被破坏,它不应该再调用侦听器 从服务注册与从活动注册有什么不同 原来的问题 我的Android应用程序即使在后台也需要获得位置更新 SO中的标准答案通常是为此创建一个服务 服务有什么帮助 要创建LocationManager并注册更新,我使用应用程序的上下文

我得到的所有答案都是“因为服务在后台运行”

这并不能回答我的问题

假设我从我的活动中调用
locationManager.requestLocationUpdates
,一段时间后,我的活动被销毁

locationManager
如何知道我的活动已被破坏,它不应该再调用侦听器

从服务注册与从活动注册有什么不同

原来的问题 我的Android应用程序即使在后台也需要获得位置更新

SO中的标准答案通常是为此创建一个服务

服务有什么帮助

要创建
LocationManager
并注册更新,我使用应用程序的上下文,例如:

因此,没有任何东西真正将位置更新“绑定”到服务


从活动中注册位置更新与从服务中注册有什么区别?

服务在后台运行,通常也在不同的线程中运行。如果您的活动被移动到后台并被销毁,您将无法获得位置更新。该服务将在后台运行,您将收到更新通知。

因为该服务始终在后台运行。另一方面,活动只是一个UI,它依赖于用户操作(屏幕旋转、最小化应用程序等(请参见活动生命周期))。您还可以绑定到普通对象上的服务和调用方法(绑定后)。如果绑定并启动服务,您可以确定它现在将丢失任何数据。关键是您要在服务中设置位置侦听器并请求更新。执行此操作时,侦听器始终处于运行状态。然后,当您打开活动时,您可以绑定服务并读取服务存储的位置


我认为你正在做活动中的所有事情,这就是为什么你没有意识到差异的原因。

因为你的活动不是在后台运行的。你必须明确地添加并发性,我想,IntentService默认在新线程上运行,但只要我向位置管理器注册回调就行了。活动生命周期中到底是什么导致位置管理器停止调用我的侦听器?当您打开其他活动minimixe应用程序时,旋转屏幕如果位置管理器使用应用程序的上下文,位置管理器如何知道我是从服务设置的?这无关紧要。位置经理不必知道这一点。不同的是,服务总是在运行,直到你停止它。当您关闭或打开另一个活动时,该活动将停止(同时停止位置管理)。该活动如何停止位置管理?这是我的问题。活动与位置管理器之间的关联是什么。当您停止活动时,它不会运行日志记录程序。如果它没有运行,就不可能处理LocationManager回调。如果您的意思是“如何停止”,则必须在onStop方法中删除侦听器:locationManager.removeUpdates(locationListener);为什么不可能处理回调?如果我注册了一个将位置写入用户默认值的侦听器,为什么即使在活动被销毁后它也不能工作?
mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
mlocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 4000, 0, listener);