我的应用使用“位置客户端”来检索当前位置,并同时路由到用户在地图上放置的点。我是Google Play服务的新手,我想知道,就最佳实践而言,何时应该断开LocationClient的连接?
Android培训站点建议了两种方法来连接和断开LocationClient
。在“检索当前位置”训练中,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
或在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;
}
可以使用相同的方法来开始和停止位置更新。
我不知道哪种方法可以被视为最佳实践,但是它们在示例源代码中。我个人在所有项目中都使用了第三种方法。第三种方法直到最近才出现在“活动识别”样本中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句