当用户进入特定区域时,我正在使用 Android 上的感知 API 来接收广播。当我第一次开发此功能时,我有大约 500 个位置,并且运行良好。但是,我现在有 3000 多个位置,当我取消注册并更新栅栏时,更新需要很长时间(大约 5 分钟),或者有时会卡住并且什么也不做。
我像这样创建意识围栏
for (...) {
...
AwarenessFence singleFence = LocationFence.entering(latitude, longitude, radius);
individualFences.add(singleFence);
}
AwarenessFence allLocationsFence = AwarenessFence.or(individualFences);
其中 individualFences 是一个包含 3000 多个栅栏的列表。然后,我通过运行取消注册并再次注册围栏
private void unregisterFence(final String fenceKey) {
Awareness.FenceApi.updateFences(
googleApiClient,
new FenceUpdateRequest.Builder()
.removeFence(fenceKey)
.build()).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
registerFence(individualFences)
}
});
}
private void registerFence(AwarenessFence individualFences) {
Awareness.FenceApi.updateFences(
googleApiClient,
new FenceUpdateRequest.Builder()
.addFence(LOCATION_FENCE_KEY, individualFences, fencePendingIntent)
.build()
).setResultCallback(new LocationFenceRegistrationResultCallback());
}
我在意图服务上构建并连接到谷歌 API 客户端。我在我的应用程序的主要活动上构建了一个不同的谷歌 API 客户端。
我进行以下测试。我第一次让栅栏注册,然后我在一分钟后再次尝试,然后在一分钟后再次尝试。
- 有 100 个位置,每次更新大约需要 1 秒
- 对于 1000 个或更多位置,第一次注册需要一秒钟,第二次大约需要 5 分钟,第三次需要更长的时间。但是如果我重新启动手机,更新只需要一秒钟。
- 有 1000 个位置,如果我等待大约 10 分钟,第二次注册只需一秒钟。
当我尝试重复更新栅栏(间隔很短)时,如何始终保持较短的更新时间?当然,我不希望在发布版本上经常更新栅栏,但出于测试目的,它会非常有用。
注册如此大量的围栏会对电池寿命或设备性能产生严重影响吗?