Android 从两个活动访问一个服务

Android 从两个活动访问一个服务,android,android-service,android-location,android-service-binding,Android,Android Service,Android Location,Android Service Binding,我有一个应用程序,我为它创建了一个后台服务来提供GPS位置更新,因为由于电池消耗的原因,GPS通常不会在后台提供快速更新 它基本上工作正常,服务从主活动开始,然后绑定到,然后我就可以访问它,并毫无问题地获得位置回调 但是,我需要从同一应用程序中的不同活动访问同一服务。因此,在第二个活动中,我只绑定到服务(而不是启动它-它已经在运行) 该服务似乎为第二个活动提供了位置更新,好吧,但我的问题是-它是该服务的同一个实例,还是已经启动了第二个实例?问题的原因是LogCat输出(如下所示): 令人困惑的是

我有一个应用程序,我为它创建了一个后台服务来提供GPS位置更新,因为由于电池消耗的原因,GPS通常不会在后台提供快速更新

它基本上工作正常,服务从主活动开始,然后绑定到,然后我就可以访问它,并毫无问题地获得位置回调

但是,我需要从同一应用程序中的不同活动访问同一服务。因此,在第二个活动中,我只绑定到服务(而不是启动它-它已经在运行)

该服务似乎为第二个活动提供了位置更新,好吧,但我的问题是-它是该服务的同一个实例,还是已经启动了第二个实例?问题的原因是LogCat输出(如下所示):

令人困惑的是,当我将第二个活动放到后台时,您可以看到它通过activity ondestory(),解除绑定然后停止服务,但在这之后仍然有位置更新


这是因为(a)实际上有两个独立的服务实例(我希望不是),还是(b)因为原始活动仍然连接到服务而没有停止服务,还是(c)其他原因?

自己找到了答案-只有一个服务实例,可以从两个活动访问

通过将活动名称存储在服务中并从每个活动中读取和写入它来实现这一点

11-06 12:49:45.939 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MA: in onCreate()
11-06 12:49:45.940 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MA: starting service
11-06 12:49:45.942 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MA: binding service
11-06 12:49:45.949 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - BC: in constructor
11-06 12:49:45.973 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - BC: in onStart()
11-06 12:49:46.011 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService: in constructor
    in onCreate()
11-06 12:49:46.025 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService: in onBind()
11-06 12:49:46.111 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MA: service connected
11-06 12:50:27.048 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()
.... (lots more locations here - below is where it swapped to activity #2)
11-06 12:51:05.044 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()
11-06 12:51:05.650 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MAP: in onCreate()
    binding service
11-06 12:51:06.773 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MAP: service connected
11-06 12:51:06.776 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()
11-06 12:51:07.040 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()
11-06 12:51:07.411 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - BC: in onStop()
11-06 12:51:08.046 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()
.... (here is where I put the 2nd activity into the background)
11-06 12:51:22.058 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()
11-06 12:51:22.379 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MAP: in onDestroy() (unbinding service)
11-06 12:51:22.383 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - MAP: in onDestroy (stopping service)
11-06 12:51:23.038 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()
11-06 12:51:24.040 25852-25852/uk.co.nightshadearts.gpscompass V/BackgroundLocationService - GH: in onLocationChanged()