У меня есть 2 приложения (1, которые регистрируют и сканируют iBeacons в фоновом режиме, без настройки), а другие без. Оба этих приложения по сути похожи, за исключением того, что для iBeacons включен 1-й.iPhone: парные устройства против iBeacon Bluetooth Потребление батареи
// location manager config
+ (CLLocationManager *)sharedLocationManager {
static CLLocationManager *_locationManager;
@synchronized(self) {
if (_locationManager == nil) {
_locationManager = [[CLLocationManager alloc] init];
//_locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
_locationManager.pausesLocationUpdatesAutomatically = NO;
if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]){
_locationManager.allowsBackgroundLocationUpdates = YES;
}
}
}
return _locationManager;
}
- (void)startMonitoringItem:(Item *)item {
CLBeaconRegion *beaconRegion = [self beaconRegionWithItem:item];
CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
[locationManager startMonitoringForRegion:beaconRegion];
}
- (void)stopMonitoringItem:(Item *)item {
CLBeaconRegion *beaconRegion = [self beaconRegionWithItem:item];
CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
[locationManager stopMonitoringForRegion:beaconRegion];
}
Я зарегистрировал около 100 iBeacons в пределах 1-го приложения, и побежал оба приложения на iPhone 6 и iPhone 6 Plus, под управлением той же версии операционной системы в непосредственной близости от 100 плюс iBeacons, как с синий зуб включен.
Меня интересуют только события входа и выхода, и, по сути, только что реализованные оба этих вызова в первом приложении. Я провел тесты около 14 часов, просто оставив оба iPhone с поддержкой bluetooth в непосредственной близости от iBeacons.
Когда я проверил состояние батареи в своем меню настроек, первое приложение потребляло не более 1% батареи, чем второе приложение (например: 1-е приложение: 25%, второе приложение: 24%), что на оба устройства. Это ожидаемое поведение, так как алгоритм сканирования синего зуба, контролируемый iOS, должен быть оптимизирован для сохранения батареи.
Однако на устройстве моего клиента 1-е приложение потребляет 5-кратную батарею, чем второе приложение (например, 1-е приложение: 10%, 2-е приложение: 2%).
Когда я проверил его настройку bluetooth, я понял, что его iPhone был сопряжен с примерно 8 другими устройствами.
Так что мой вопрос в этом. Сопряжение с другими устройствами привело бы к значительно большему объему батареи в моем первом приложении, хотя оно просто сканирует iBeacons? Если да, есть ли способ, которым я могу оптимизировать алгоритм, чтобы игнорировать сопряженные устройства и просто сканировать iBeacons.
Я читал документацию iOS и консультировал stackoverflow, но пока не нашел удовлетворительного ответа.
Буду признателен за любые советы!
Обновление: Пожалуйста, смотрите скриншот для примера
В приведенном выше скриншоте, 1 и 2 приложения батареи в процентах использования почти одинаковы на моем устройстве. Тем не менее, на устройстве моего клиента (который соединен с 8 другими устройствами), первое приложение, как правило, в 5 раз больше, чем процент использования второго аккумулятора приложения (например, от 10% до 2%), как за последние 24 часа, так и последние 7 дней , Оба приложения работали примерно на такое же время на своем устройстве. Это не первый раз, когда он произошел.
Для устройства, которое соединено с 8 другими устройствами - это те устройства, которые присутствуют, когда происходит утечка сообщаемого аккумулятора? Если это так, возможно, что у iOS есть ошибка, которая неправильно информирует об отказе батареи как о приложении, когда на самом деле это утечка на системном уровне. – davidgyoung
Привет, Дэвид, это правильно. Эти устройства присутствуют и активны, когда происходит утечка. Я прочитаю больше, чтобы узнать, сообщается ли эта ошибка. Большое спасибо еще раз. –