私は、アプリケーションの実行中にジオフェンス内でユーザーの動きを追跡するアプリケーションに取り組んでいます。メインアクティビティ(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リストからアプリケーションをクリアすると、アンドロイドスタジオのモニターで上記のコードに記載されているすべてのログステートメントが取得されますが、アプリケーションが再起動すると、その変数の状態は最後のスタート。
"変数の状態は最後の開始から保持されます" - どのような変数の状態?これらの変数はどこに宣言されていますか?普通のフィールドか 'static'フィールドですか? – CommonsWare
変数はジオフェンスサービスで宣言されています。それらは静的変数です。 – forcehandler
Geoffenceの 'service'を起動せずにアプリケーションを閉じると、メインアクティビティが' onDestroy() 'メソッドを呼び出さないことに気付きましたが、' onDestroy() 'メソッドは、サービス。 – forcehandler