我的应用程序使用位置客户端来检索当前位置,还可以路由到用户在地图上放置的点。我对google play服务还不熟悉,我想知道最佳实践是什么时候才能断开我的locationclient?
最佳答案
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()
,然后在onConnected
中调用requestActivityUpdates
或removeActivityUpdates
,然后立即调用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
停止活动识别更新。另一种方法是将两个方法(
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;
}
同样的方法可以用于启动和停止位置更新。
我不知道这些方法中的哪一种可能被认为是最佳实践,但它们在示例源代码中。我个人在所有的项目中都使用第三种方法。第三种方法是在最近的活动识别样本中。