【问题标题】:LocationListener does not get killedLocationListener 没有被杀死
【发布时间】:2012-06-20 15:11:54
【问题描述】:

我有一个实现 LocationListener 的前台服务。当服务被杀死时,它会继续得到修复。然而这就是我在onDestroy()中所说的

@Override
public void onDestroy() {
    Log.e(getPackageName(), "Destroying GPSservice");
    super.onDestroy();
    running = false;
    stopForeground(true);
    locationManager.removeUpdates(EventService.this);
    locationManager = null;
}

我有什么遗漏吗?

编辑

更多代码。这是在onCreate():

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    Criteria criteria = new Criteria();
    String bestProvider = locationManager.getBestProvider(criteria, true);

    Location location = locationManager.getLastKnownLocation(bestProvider);
    if (location != null) {
        onLocationChanged(location);
    }
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            3000L, 15.0f, this);

【问题讨论】:

  • 添加更多信息,你的 locationListener 是如何实现的?
  • 我真的不想听起来势利,但是:它的实现方式应该如此。 GPS 本身工作正常,但是当服务被杀死时,我希望 locationManager 删除服务的更新。相反,它不断得到修复。否则,我必须在这里复制很多代码..
  • 发布更多代码以显示您的位置监听器是如何实现的
  • 你知道你的onDestroy()方法是否被调用了吗?你有绑定到你的服务的客户吗?
  • 我也有类似的问题。在我的情况下,问题与活动生命周期(developer.android.com/guide/components/…)有关。请注意如何在不调用 onDestroy 的情况下杀死 Activity,从而防止注册位置侦听器。

标签: android android-service android-location


【解决方案1】:

使用

locationManager.removeUpdates(Your_Location_Listener_instance);

而不是

locationManager.removeUpdates(EventService.this);

更多信息参见文档public void removeUpdates (LocationListener listener)

【讨论】:

  • 我上面已经说过我的LocationListener是由EventService实现的。这就是我认为的例子。
【解决方案2】:

我已经解决了这个问题。事实证明,MyLocationOverlay 也绑定到 LocationSensorThread,而我从未将其关闭。所以这让 GPS 保持清醒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多