0

在我的service中,在某些情况下,我无法阻止 GPS 搜索和耗尽设备电池。

LocationListenerAgent.java

@Override
public void onCreate() {
    thisContext = this;
    // Register ourselves for location updates

    networkListener = new LocationListenerAgent();
    gpsListener = new LocationListenerAgent();

    lmgrNet = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    lmgrGps = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    gps_enabled = lmgrGps.isProviderEnabled(LocationManager.GPS_PROVIDER);
    lmgrNet.requestLocationUpdates("network", ONE_MINUTE, 10, networkListener);
    lmgrGps.requestLocationUpdates("gps", ONE_MINUTE, 10, gpsListener);

    super.onCreate();
}

@Override
public void onDestroy() {
    super.onDestroy();
    // Unregister listener
    lmgrNet.removeUpdates(this);
    lmgrNet = null;
    lmgrGps.removeUpdates(this);
    lmgrGps = null;
}

当我在破坏应用程序的主要活动上按“返回”时,从我的应用程序的某些地方,这被称为:

@Override
protected void onStop() {
    if (mBound) {
        unbindService(mConnection); //this is a callback to the locationlisteneragent class to bind it to a service
        mBound = false;
    }
    super.onStop();
}
@Override
protected void onDestroy() {

    if (mBound) {
        unbindService(mConnection);
        mBound = false;
    }
    stopService(new Intent(this, LocationListenerAgent.class));
    super.onDestroy();
}

也许我的super.On生命周期方法需要在该方法的代码之前。

我还需要做什么才能停止 GPS ???我见过其他人对此有疑问,答案似乎并不那么绝对。

在我的应用程序的其他情况下,GPS 确实停止了。

4

3 回答 3

2

我解决了我的问题。我知道我在原始帖子中没有提到 mapview,但如果您也在使用 MapView,解决方案是 mapview 可以使用与您自己的 gps 位置侦听服务无关的 GPS 服务。

在您的地图视图中

private MyLocationOverlay currLocationOverlay;

@Override
protected void onStop() {
    if(currLocationOverlay!=null)
        currLocationOverlay.disableMyLocation();
    super.onStop();
}
@Override
protected void onDestroy() {
    if(currLocationOverlay!=null)
        currLocationOverlay.disableMyLocation();
    stopService(new Intent(this, LocationListenerAgent.class));
    super.onDestroy();
}
于 2012-11-21T15:53:14.727 回答
1

根据您发布的代码,我认为您没有删除位置更新。

在您的 onDestroy() 方法中,它应该是:

lmgrNet.removeUpdates(networkListener);
lmgrNet.removeUpdates(gpsListener);
于 2012-11-21T15:51:59.623 回答
0

你也可以像这样停止

stopService(new Intent(AlertsActivity.this,PollingService.class)); android.os.Process.killProcess(android.os.Process.myPid());

于 2013-12-19T12:38:30.950 回答