我的应用程序使用 Location Client 来检索当前位置并路由到用户在地图上放置的点。我是 google play 服务的新手,想知道就最佳实践而言,我应该何时断开 LocationClient 的连接?
问问题
2610 次
1 回答
3
Android 培训网站建议使用两种方法来连接和断开LocationClient
. 在Retrieving the Current Location训练中,LocationClient
被初始化onCreate
,connect()
被调用,onStart
被disconnect()
这样调用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
, requestActivityUpdates
orremoveActivityUpdates
被调用并且紧接着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;
}
相同的方法可用于启动和停止位置更新。
我不知道哪种方法可能被认为是最佳实践,但它们在示例源代码中。我个人在所有项目中都使用第三种方法。第三种方法直到最近才出现在活动识别示例中。
于 2014-01-25T17:07:32.713 回答