2015-12-05 4 views
0

У меня есть 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, но пока не нашел удовлетворительного ответа.

Буду признателен за любые советы!

Обновление: Пожалуйста, смотрите скриншот для примера

Battery Consumption Percentages

В приведенном выше скриншоте, 1 и 2 приложения батареи в процентах использования почти одинаковы на моем устройстве. Тем не менее, на устройстве моего клиента (который соединен с 8 другими устройствами), первое приложение, как правило, в 5 раз больше, чем процент использования второго аккумулятора приложения (например, от 10% до 2%), как за последние 24 часа, так и последние 7 дней , Оба приложения работали примерно на такое же время на своем устройстве. Это не первый раз, когда он произошел.

+1

Для устройства, которое соединено с 8 другими устройствами - это те устройства, которые присутствуют, когда происходит утечка сообщаемого аккумулятора? Если это так, возможно, что у iOS есть ошибка, которая неправильно информирует об отказе батареи как о приложении, когда на самом деле это утечка на системном уровне. – davidgyoung

+0

Привет, Дэвид, это правильно. Эти устройства присутствуют и активны, когда происходит утечка. Я прочитаю больше, чтобы узнать, сообщается ли эта ошибка. Большое спасибо еще раз. –

ответ

1

Да, Bluetooth спаривание, особенно классический Bluetooth будет использовать гораздо больше энергии, чем сканирование для маяков в фоновом режиме на IOS.

Вы ничего не можете поделать с тем, что было сделано за пределами вашего приложения. Приложения iOS для песочниц от Apple, поэтому они не могут повлиять на общие системные настройки (например, включение или выключение Bluetooth или соединение Bluetooth для таких вещей, как привязку и динамики) или поведение других приложений (например, те, которые могут сочетаться с устройствами Bluetooth для конкретных приложений .)

Практический результат: Использование батареи, которую вы описываете, не вызвано сканированием маяка вашего приложения. Это вызвано спариванием.Если вы удалите первое приложение с устройства вашего клиента, устройство должно разрядить аккумулятор так же, как если бы ваше приложение не было установлено вообще.

+0

Привет, Дэвид, спасибо за быстрое обновление! Просто продолжение, любая идея, почему использование батареи для спаривания подсчитывается под моим первым приложением? Если я удалю 1-е приложение, будет ли использоваться битва другое приложение, использующее также сканирование Bluetooth? –

+0

По моему опыту, сканирование и спаривание Bluetooth отображаются в настройках как использование аккумулятора на уровне системы, а не как использование уровня приложения. – davidgyoung

+0

Спасибо за разъяснение! Но он по-прежнему не объясняет, почему соединение моего клиента с bluetooth, которое не имеет ничего общего с моим первым приложением, которое является jusy-сканированием для iBeacons, приводит к увеличению на 5 раз больше потребления батареи, чем второе приложение в меню настроек. Я не могу найти использование батареи на уровне системы в меню использования батареи, так как она отображает только список приложений и их долю потребления батареи. –

Смежные вопросы