我正在开发一个应用程序,用于在应用程序运行时跟踪用户在地理围栏内的移动。主要活动(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");
}
这里是S的onDestroy()
方法。
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"/>
从android最新列表中清除应用程序后,我在android studio监视器中得到上面代码中提到的所有日志语句,但是服务似乎保持活着,因为在应用程序重启时,其变量状态保留在最后一次开始。
答案 0 :(得分:0)
其变量状态从上次开始保留。
According to your comment,这些是static
字段。这些static
字段适用于整个过程的生命。您的服务被销毁的事实不会立即影响您的流程。如果您在流程仍然存在时再次启动服务,那些static
字段将具有他们曾经拥有的任何值。
如果您不想要此行为,请从这些字段中删除static
关键字。