我正在研究一个由服务和活动组成的应用程序。该服务使用LocationClient对象来请求当前位置每分钟。该活动使用另一个LocationClient对象在单击按钮后请求单个当前位置。多个LocationClients干扰?
在服务:
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(60000);
mLocationRequest.setFastestInterval(60000);
mLocationClient = new LocationClient(this, this, this);
// ... when connected:
mLocationClient.requestLocationUpdates(mLocationRequest, this);
在活动:
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(0); // 0 should be ok since only a single location is requested
mLocationRequest.setFastestInterval(0);
mLocationRequest.setNumUpdates(1); // get only a single location
mLocationClient = new LocationClient(this, this, this);
// ... when connected:
mLocationClient.requestLocationUpdates(mLocationRequest, this);
服务单独就像预期。
但是,如果服务已启动并且该活动试图获取单个当前位置,则它会收到该位置,直到服务收到更新的位置。所以这个活动需要等待60秒。
但是,如果服务是未启动并且该活动尝试获取单个当前位置,则它会在预计的短时间(通常为< 5秒)后收到该位置。
是什么导致了这个问题?每个应用只允许一个LocationListener?
我知道时间不能保证。;-)但是,如果我正确理解文档,那么位置服务会尝试使用注册的LocationRequests给定的最小可能时间间隔。在我的情况下,这是活动之一,而不是服务之一。另一个例子:如果“我的曲目”在后台每分钟跟踪一次位置,那么我的活动仍然可以更快地获取当前位置(〜3秒) - 而无需知道“我的曲目”的内部情况。但是,使用我的Activity上方的两个LocationClient始终等待服务设置的时间。 – Biggie
请注意,文档中提到:“此方法设置您的应用更喜欢接收位置更新的速率(以毫秒为单位),如果没有其他应用正在从定位服务接收更新,您的应用将以此速率接收更新。”文档讨论的是“应用程序”,而不是“LocationClient/LocationListener对象”。这就是为什么我问在同一个应用程序中有多个LocationClient的问题。对我来说,似乎任何应用程序的LocationClients中第一次使用的时间间隔都会胜出。在我的情况下,60秒的服务时间间隔。 – Biggie
那么在文档中没有任何内容将LocationClient限制为每个应用的一个实例。但更新在应用程序范围内的观点值得探讨。对于Google Play服务来说,这是我的观点。每部手机只有一个实例/版本。如果您必须通过LocationClient从播放服务请求更新,我会想象最后一个请求会是随后的请求。你应该切换这些值,看看你是否得到相反的结果。 – Rarw