2017-04-08 24 views
0

私は、アプリケーションの実行中にジオフェンス内でユーザーの動きを追跡するアプリケーションに取り組んでいます。メインアクティビティ(M)はGeofenceService(S)を開始してバインドし、指定されたジオフェンス内でユーザーが実行したステップ数をカウントします。アプリケーション終了時にサービスを停止する

私は、ジオファンスからユーザが移動したり、アプリケーションが終了したりするとすぐにサービスを破棄したいと考えています。アプリケーションが強制終了されたときにサービスを停止するには、私は単にサービスのバインドを解除して、ここで

Sに stopservice()を呼び出すことはS.

public void onDestroy() 
{ 
    super.onDestroy(); 
    Log.d(TAG, "onDestroy of main activity"); 
    if(isGeofenceBound){ 
     Log.d(TAG, "unbinding geofence service"); 
     unbindService(mGeofenceConnection); 
     isGeofenceBound = false; 
    } 
    stopService(new Intent(getApplicationContext(), GeofenceService.class)); 
    Log.d(TAG, "after calling stop service on geofenceservice in main activity"); 
} 

を破壊するための主な活動でコードを行くと、ここonDestroy()を行きますS.

public void onDestroy(){ 

    if(mBound){ 
     unbindService(mStepConnection); 
     mBound = false; 
    } 
    stopPedometerService(); 
    googleApiClient.disconnect(); 
    Log.d(TAG, "before super onDestroy of geofence service"); 
    stopSelf(); 

    super.onDestroy(); 
    Log.d(TAG, "After super onDestroy of geofence service"); 
} 

の方法そしてここでは、サービス

<service android:name=".geofencing.GeofenceService" 
      android:stopWithTask="true"/> 
のマニフェストのコードです

アンドロイドのrecentsリストからアプリケーションをクリアすると、アンドロイドスタジオのモニターで上記のコードに記載されているすべてのログステートメントが取得されますが、アプリケーションが再起動すると、その変数の状態は最後のスタート。

+0

"変数の状態は最後の開始から保持されます" - どのような変数の状態?これらの変数はどこに宣言されていますか?普通のフィールドか 'static'フィールドですか? – CommonsWare

+0

変数はジオフェンスサービスで宣言されています。それらは静的変数です。 – forcehandler

+0

Geoffenceの 'service'を起動せずにアプリケーションを閉じると、メインアクティビティが' onDestroy() 'メソッドを呼び出さないことに気付きましたが、' onDestroy() 'メソッドは、サービス。 – forcehandler

答えて

0

その変数状態は最後の開始から保存されます。

According to your commentであり、それらはstaticフィールドである。そのようなstaticフィールドは、プロセスの生涯にわたって生きています。あなたのサービスが破壊されているという事実は、あなたのプロセスに直接影響を与えません。プロセスがまだ進行している間にサービスを再開すると、それらのフィールドにはどんな値を持たせることになります。

この現象が発生しないようにするには、これらのフィールドからstaticキーワードを削除します。

+0

ここでは、フィールドを非静的にすることがどのように役立つのかを見ていますが、サービスはGPS状態変更ブロードキャストも聞いており、アプリケーションが実行されていないときにサービスがそのようなブロードキャストに応答することは望ましくありません。 – forcehandler

+0

@forcehandler: "サービスはGPS状態変更ブロードキャストも聞いています" - ブロードキャストに関連するあなたの質問のコードは表示されません。 – CommonsWare

関連する問題