应用程序终止时停止服务

时间:2017-04-08 13:32:30

标签: android service

我正在开发一个应用程序,用于在应用程序运行时跟踪用户在地理围栏内的移动。主要活动(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监视器中得到上面代码中提到的所有日志语句,但是服务似乎保持活着,因为在应用程序重启时,其变量状态保留在最后一次开始。

1 个答案:

答案 0 :(得分:0)

  

其变量状态从上次开始保留。

According to your comment,这些是static字段。这些static字段适用于整个过程的生命。您的服务被销毁的事实不会立即影响您的流程。如果您在流程仍然存在时再次启动服务,那些static字段将具有他们曾经拥有的任何值。

如果您不想要此行为,请从这些字段中删除static关键字。