Android: как убедиться, что мое приложение не приостанавливается при работе в фоновом режиме

Android-приложение, над которым я работаю, считывает информацию с ближайших маяков (устройств) с помощью Bluetooth. Он отлично работает, когда приложение находится на переднем плане (тестировал 20 минут). Однако через несколько минут после того, как приложение переходит в фоновый режим, оно перестает читаться.

Я заметил, что когда приложение переходит в фоновый режим, выполняется метод onpause(); все еще мое приложение читает в течение нескольких минут, а затем просто перестает что-либо читать (когда я вручную вывожу приложение на передний план, выполняется метод oncreate, и приложение работает нормально).

Почему мое приложение перестало читать через несколько минут после того, как перешло в фоновый режим. Мое приложение - это деятельность, а не услуга.

  1. должен преобразовать деятельность в услугу или
  2. я должен создать службу намерений или
  3. я должен создать передний план

Я не понимаю разницы между тремя вышеперечисленными типами услуг и поможет ли мне какой-либо из них.

Хотя потоки немного старше, я просмотрел Предотвратить приложение останавливается или приостанавливается операционной системой и os?rq=1">Как мы можем предотвратить уничтожение службы ОС? и мое приложение было уничтожено системой Android, когда оно работало в фоновом режиме

Но я потерян. Любое обсуждение приветствуется

ИЗМЕНИТЬ

Как я понял из ответа @davidgyoung, мне нужно написать сервис. Я предполагаю, что часть моего приложения с графическим интерфейсом переходит в основную активность; тогда как я могу убедиться, что моя основная активность/графический интерфейс по-прежнему активен в памяти и не был убит Android к моменту, когда служба пытается транслировать/уведомлять графический интерфейс

/РЕДАКТИРОВАТЬ


person mobileDev    schedule 17.04.2016    source источник


Ответы (1)


Действие не предназначено для длительной работы в фоновом режиме. ОС Android удалит действия, которые не видны, поскольку память требуется для других функций. Хотя служба является подходящей альтернативой, даже служба будет уничтожена из-за нехватки памяти ОС, поэтому вам все равно придется перезапустить службу, если она будет уничтожена ОС и вы продолжаете хотеть выполнять сканирование маяков.

Все эти проблемы возникли, когда мы создали Android Beacon Library, и остановились на эти решения для продолжения сканирования:

  • Используйте службу для сканирования маяков в фоновом режиме. Это не обязательно должен быть IntentService, но это разумный вариант.

  • Используйте AlarmManager для перезапуска службы сканирования через 5 минут на случай, если она будет убита. (Эта задержка позволяет операционной системе восстановиться после временной потребности в дополнительной памяти.) Если служба сканирования все еще работает, просто переназначьте сигнал тревоги.

  • Зарегистрируйте события на уровне ОС (загрузка, подключение/отключение питания), чтобы перезапустить службу сканирования позже, если пользователь убьет приложение с помощью переключателя задач.

Все это создано для вас, если вы решите использовать библиотеку Android Beacon (и мы тоже приветствуем вклад!) Если вы хотите создать свою собственную библиотеку, вы можете просмотрите исходный код, чтобы увидеть, как эти вещи были построены. Не стесняйтесь копировать и изменять тоже. В этом красота открытого исходного кода!

Полное раскрытие: я ведущий разработчик проекта с открытым исходным кодом Android Beacon Library.

person davidgyoung    schedule 17.04.2016
comment
как мне узнать, совместим ли мой маяк с ABL. Следующий инструмент не обнаруживает мои маяки play.google.com/store/ apps/details?id=com.radiusnetworks.locate - person mobileDev; 17.04.2016
comment
Библиотека маяков Android может обнаружить любой маяк с опубликованным форматом. Если вы можете описать свой тип маяка, я смогу дать совет. - person davidgyoung; 22.04.2016