Жизненный цикл Android - я должен использовать сервис? - PullRequest
3 голосов
/ 29 февраля 2012

Я создаю приложение для чата, и мне интересно, стоит ли мне использовать службу и как она повлияет на жизненный цикл моего приложения. Я понимаю, что ОС Android может разрушить мое приложение, если недостаточно памяти. Мой вопрос: перезапускаются ли приложения, использующие «Действия» и «Приемники», только если Android их уничтожает, или мне для этого нужна STICKY-служба? Я создал приложения с обоими, поэтому у меня есть идея, но я просто хочу убедиться.

Второй http://developer.android.com/reference/android/app/Service.html говорит:

Обратите внимание, что службы, как и другие объекты приложений, работают в основном нить их хостинг процесса. Это означает, что если ваш сервис собирается сделать любой процессор интенсивным (например, воспроизведение MP3) или блокировку (например, как сетевые операции, он должен создать свой собственный поток, в котором делай эту работу.

Мое приложение имеет долго работающий поток (AsyncTask), который выполняет чтение с сервера (и постоянно блокирует). Является ли хорошей идеей оставить свое приложение без изменений и использовать вместо него AsyncTask? Как это повлияет на жизненный цикл приложения, если Android решит закрыть мое приложение? Является ли хорошей практикой иметь долгосрочное обслуживание, если в этом нет необходимости, как, в любом случае, я должен в любом случае предоставлять услуги STICKY? Я заметил, что многие приложения для чата и текстовых сообщений используют липкий сервис. Я просто пытаюсь понять, понадобится ли мое приложение.

Еще раз спасибо заранее!

Ответы [ 3 ]

5 голосов
/ 29 февраля 2012

По сути, сервис позволяет запускать задачу, которая не привязана к одному жизненному циклу активности.

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

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

Если вы хотите, чтобы пользователи знали, что служба запущена, тогда ваша служба, ваша служба, должна перейти на передний план и разрешить взаимодействие через панель уведомлений.

Если вы хотите, чтобы ваши действия связывались с вашим сервисом, то вам следует связать свой сервис с вашими действиями .

И наконец, вы должны предоставить пользователям четкий способ остановить вашу службу , поскольку этот процесс больше не будет привязан к жизненному циклу вашего приложения, и вы должны явно вызывать его метод stop или вызывать stopService.или сделайте сервисный вызов stopSelf на себя.Затем предоставьте своим пользователям простой способ остановить службу.

Вам также понадобится powerlock и, скорее всего, wifi lock для вашей службы, чтобы онне останавливается, когда устройство переходит в спящий режим, и подключение к сети сохраняется для вашего сервиса, когда ваше приложение очищается с помощью Android.

0 голосов
/ 29 февраля 2012

Это не прямой ответ, но вы можете рассмотреть вопрос об использовании XMPP .

Android может и уничтожит любое действие в любое время.

Я бы определенно воспользовался услугой.Вы уже используете AsyncTask, так что вы в порядке потоков.Если вы хотите получать ответы на ваши чаты, когда ваше приложение не находится на переднем плане, вам понадобится служба.

Ваша служба может затем отправить уведомление при получении нового сообщения или о том, что требуется.

0 голосов
/ 29 февраля 2012

Я думаю, что вам лучше использовать Сервис. AsyncTask в основном будет таким же, потому что он работает в отдельном потоке от основного потока. Я видел некоторые примеры в определенных условиях AsyncTask был приостановлен при выходе из основного потока пользовательского интерфейса. Я считаю, что при нехватке памяти служба будет перезапущена, а не просто уничтожена, но я не уверен на 100%. Для чего нужны Сервисы, это долгосрочные фоновые задачи.

...