我应该在什么时候断开Android应用程序中Google Play服务的连接?

我应该在什么时候断开Android应用程序中Google Play服务的连接?,android,google-play-services,location-client,Android,Google Play Services,Location Client,我的应用程序使用Location客户端来检索当前位置,并路由到用户在地图上放置的点。我是google play服务的新手,我想知道最佳实践是什么时候应该断开LocationClient的连接 Android培训网站建议使用两种方法连接和断开LocationClient。在培训中,LocationClient在onCreate中初始化,connect()在onStart中调用,disconnect()在onStop中调用,如下所示(取自) 然后,您可以选择何时何地开始或停止位置更新 在Locati

我的应用程序使用Location客户端来检索当前位置,并路由到用户在地图上放置的点。我是google play服务的新手,我想知道最佳实践是什么时候应该断开LocationClient的连接

Android培训网站建议使用两种方法连接和断开
LocationClient
。在培训中,
LocationClient
onCreate
中初始化,
connect()
onStart
中调用,
disconnect()
onStop
中调用,如下所示(取自)

然后,您可以选择何时何地开始或停止位置更新

LocationClient中,每当用户希望请求或停止活动识别更新时,客户端都会初始化。首先调用
connect()
,然后在
onConnected
中调用
requestActivityUpdates
removeActivityUpdates
,然后立即调用
disconnect()
。在示例中,有一个名为
DetectionRequester
的类,用于启动活动识别更新:

public void requestUpdates() {
    getActivityRecognitionClient().connect();
}

@Override
private void onConnected() {
    getActivityRecognitionClient().requestActivityUpdates(...);
    getActivityRecognitionClient().disconnect();
}

@Override
public void onDisconnected() {
    mActivityRecognitionClient = null;
}

private ActivityRecognitionClient getActivityRecognitionClient() {
    if (mActivityRecognitionClient == null) {
        mActivityRecognitionClient = new ActivityRecognitionClient(...);
    }
    return mActivityRecognitionClient;
}
还有另一个类似的类叫做
DetectionRemover
,它停止活动识别更新

另一种方法是将两种方法(
requestUpdates
removeUpdates
)放在同一个类中,如下所示:

public enum RequestType {
    START, STOP;
}

@Override
public void onConnected(Bundle bundle) {
    switch (mRequestType) {
        case START:
            getActivityRecognitionClient().requestActivityUpdates(...);
            break;
        case STOP:
            getActivityRecognitionClient().removeActivityUpdates(...);
            break;
        default:
            break;
    }
    getActivityRecognitionClient().disconnect();
}

@Override
public void onDisconnected() {
    mActivityRecognitionClient = null;
}


public void requestUpdates() {
    mRequestType = RequestType.START;
    getActivityRecognitionClient().connect();
}

public void removeUpdates() {
    mRequestType = RequestType.STOP;
    getActivityRecognitionClient().connect();
}

private ActivityRecognitionClient getActivityRecognitionClient() {
    if (mActivityRecognitionClient == null) {
        mActivityRecognitionClient = new ActivityRecognitionClient(...);
    }
    return mActivityRecognitionClient;
}
同样的方法可用于启动和停止位置更新


我不知道这其中哪一种方法可能被认为是最佳实践,但它们都在示例源代码中。我个人在所有项目中都使用第三种方法。直到最近,第三种方法还在Activity Recognition示例中。

LocationClient现在已被弃用。
public enum RequestType {
    START, STOP;
}

@Override
public void onConnected(Bundle bundle) {
    switch (mRequestType) {
        case START:
            getActivityRecognitionClient().requestActivityUpdates(...);
            break;
        case STOP:
            getActivityRecognitionClient().removeActivityUpdates(...);
            break;
        default:
            break;
    }
    getActivityRecognitionClient().disconnect();
}

@Override
public void onDisconnected() {
    mActivityRecognitionClient = null;
}


public void requestUpdates() {
    mRequestType = RequestType.START;
    getActivityRecognitionClient().connect();
}

public void removeUpdates() {
    mRequestType = RequestType.STOP;
    getActivityRecognitionClient().connect();
}

private ActivityRecognitionClient getActivityRecognitionClient() {
    if (mActivityRecognitionClient == null) {
        mActivityRecognitionClient = new ActivityRecognitionClient(...);
    }
    return mActivityRecognitionClient;
}