0

停止したいのです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() {
    }

}

このサービスを別のアクティビティ、onCreateメソッドで呼び出します。

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

1 に答える 1

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サービス

于 2013-03-03T10:30:26.383 に答える