停止LocationListener服务

时间:2013-03-03 10:07:07

标签: android android-service android-location

我想停止LocationListener,但是使用Log,我发现我的服务仍然在removeUpdates()方法之后运行(当位置发生变化时,它已插入进入我的日志)。你知道问题出在哪里吗?提前致谢。

public class MyService extends Service implements LocationListener {

 private final static String TAG = "MyService";
 LocationManager lm;

     public MyService() {
     }

     ....//Other methods here

    public void onLocationChanged(Location loc) {
         Log.d(TAG, loc.toString());
         if(/*A condition, which has to stop the service when it´s time*/) 
         {
             lm.removeUpdates(this);
             lm = null;
         }
    }

    public void subscribeToLocationUpdates() {
        this.lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        this.lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    }

    @Override
    public void onDestroy() {
    }

}

我在另一个Activity,onCreate方法中调用此服务:

    ComponentName comp = new ComponentName(getPackageName(),
                 MyService.class.getName());
    ComponentName service = startService(new Intent().setComponent(comp));

1 个答案:

答案 0 :(得分:2)

服务对象及其生命周期与您的位置管理器的状态无关。或任何其他对象。 服务代表您应用的背景部分。完成后,您可以调用finish()方法结束它。

所以在你的情况下:

   public void onLocationChanged(Location loc) {
     Log.d(TAG, loc.toString());
     if(/*A condition, which has to stop the service when it´s time*/) 
     {
         lm.removeUpdates(this);
         lm = null;
         stopSelf(); // end this service
     }
}

请查看android的服务文档,以全面了解其性质:Android Service