4

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

4

1 回答 1

3

Android 培训网站建议使用两种方法来连接和断开LocationClient. 在Retrieving the Current Location训练中,LocationClient被初始化onCreateconnect()被调用,onStartdisconnect()这样调用onStop(取自源代码)。

@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();
}

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

识别用户的当前活动中,LocationClient每次用户想要请求或停止活动识别更新时都会初始化。首先,connect()被调用, 然后在onConnected, requestActivityUpdatesorremoveActivityUpdates被调用并且紧接着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的类叫做停止活动识别更新。

另一种方法是将两个方法 (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;
}

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

我不知道哪种方法可能被认为是最佳实践,但它们在示例源代码中。我个人在所有项目中都使用第三种方法。第三种方法直到最近才出现在活动识别示例中。

于 2014-01-25T17:07:32.713 回答