我应该何时在Android应用中与Google Play服务断开连接?

时间:2014-01-25 15:49:31

标签: android google-play-services location-client

我的应用使用位置客户端来检索当前位置,并路由到用户在地图上放置的点。我是谷歌播放服务的新手,我想知道最佳做法何时应该断开我的LocationClient?

1 个答案:

答案 0 :(得分:3)

Android培训网站提供了两种连接和断开LocationClient的方法。在Retrieving the Current Location培训中,LocationClient已在onCreate初始化,connect()onStart中调用,disconnect()onStop中调用像这样(取自source code)。

@Override
protected void onCreate(Bundle savedInstanceState) {
    mLocationClient = new LocationClient(this, this, this);
}

@Override
public void onStop() {
    mLocationClient.disconnect();
    super.onStop();
}

@Override
public void onStart() {
    super.onStart();
    mLocationClient.connect();
}

然后您可以选择开始或停止位置更新的时间和地点。

Recognizing the User's Current Activity中,每当用户想要请求或停止活动识别更新时,LocationClient都会被初始化。首先,调用connect(),然后调用onConnectedrequestActivityUpdatesremoveActivityUpdates,并在调用disconnect()后立即调用。在示例source code中,有一个名为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的类似类停止了活动识别更新。

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

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;
}

可以使用相同的方法来启动和停止位置更新。

我不知道这种方法可能被认为是最佳做法,但它们在示例源代码中。我个人在我的所有项目中使用第三种方法。第三种方法直到最近还在活动识别样本中。