При разработке приложения, использующего Bluetooth Low Energy, наступает момент, когда устройство iOS теряет соединение с периферийным устройством. (Иногда часами.)
Чтобы повторно подключиться к существующему периферийному устройству, приложение должно постоянно сканировать в фоновом режиме с определенной скоростью в течение дня (дней), даже если приложение работает в фоновом режиме.
Проблема в том, что iOS не гарантирует, что ваше приложение не будет уничтожено из-за нехватки памяти и т. д.
Информация в Руководстве по программированию для iPhone OS говорится, что:
Приложения, работающие с периферийными устройствами Bluetooth, могут запросить пробуждение, если периферийное устройство доставляет обновление, когда приложение приостановлено. Эта поддержка важна для аксессуаров Bluetooth-le, которые передают данные через регулярные промежутки времени, таких как пульсометр Bluetooth. Когда приложение включает ключ UIBackgroundModes со значением bluetooth-central в свой файл Info.plist, платформа Core Bluetooth сохраняет открытыми все активные сеансы для соответствующего периферийного устройства. Кроме того, новые данные, поступающие с периферийного устройства, заставляют систему активировать приложение, чтобы оно могло обработать данные. Система также активирует приложение для обработки уведомлений о подключении и отключении аксессуара.
Проблема не возникает, когда телефон подключен к устройству и приложение работает в фоновом режиме. Однако это происходит, когда устройство отключено, а приложение работает в фоновом режиме. В этом конкретном случае телефон больше не подключен к периферийному устройству и, следовательно, больше не получает уведомления.
Многие люди обсуждали это раньше либо на Stack Overflow, либо на форумах Apple, и я полагаю, что один из разработчиков Apple ответил, сказав:
Мы знаем об этой проблеме и пытаемся найти решение. В настоящее время обходного пути нет».
Мой вопрос: есть ли способ хотя бы повысить ваши шансы не быть убитым iOS из-за нехватки памяти?
Например, приложение для обмена мгновенными сообщениями (IMO), кажется, довольно хорошо работает в фоновом режиме. Через несколько дней бездействия приложение проснется и отобразит сообщение gChat.
Я ставлю под сомнение такие вещи, как
- Сильные указатели
- Общий объем памяти
- Уменьшение размера памяти, когда приложение находится в фоновом режиме или свернуто
- Уменьшение частоты фоновой работы
- И Т. Д.