android: Сервис против SingleTop Активность перешла в фоновый режим - какая разница? - PullRequest
4 голосов
/ 25 июля 2011


В настоящее время я разрабатываю приложение, которое воспроизводит Steam Audio с использованием класса MediaPlayer.И я бы объявил его основной (Player) активность как SingleTop.Также для кнопки «Назад» он делает moveTaskToBack(true), что действует так же, как кнопка «Домой».Таким образом, он просто остается и играет в фоновом режиме, и если пользователь хочет увидеть графический интерфейс, он просто запускает приложение еще раз (что менее удобно) или щелкает уведомление специального приложения.Выход осуществляется через меню.
но каковы преимущества использования сервиса вместо активности в таком случае?Определенно было бы сложнее развиваться, я должен сказать.Боюсь, что даже создание экземпляра графического интерфейса в «фоновом режиме» займет гораздо больше времени.

1 Ответ

4 голосов
/ 25 июля 2011

Из документации Android:

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

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

также

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

ОС Android может уничтожить вашу активность, если у нее закончились ресурсы, но она не разрушит службу.

РЕДАКТИРОВАТЬ: вы должны использовать startForeground(), чтобы гарантировать, что ваш Service не будет убит в ситуациях, когда ресурсы ограничены. Из документов:

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

...