Сервисы и мероприятия для Android - PullRequest
0 голосов
/ 26 августа 2010

У меня есть несколько вопросов о сервисе Android и жизненных циклах активности. Надеюсь, вы, ребята, можете мне помочь. Я написал приложение, которое использует местоположение GPS и хранит их. Он должен постоянно следить за обновлениями местоположения GPS.

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

Учтите это: вы запускаете приложение. Он получает исправление GPS, и теперь вы можете начать следить за обновлениями местоположения и сохранять их. Когда вы это сделаете, он должен запустить службу, которая получает обновления местоположения GPS. Итак, теперь у вас есть активность И служба, запущенная в одном и том же процессе. Хорошо. Но что произойдет, если вы нажмете кнопку аппаратного возврата на вашем телефоне? Будет ли уничтожено только действие, если процесс все еще работает с вашим сервисом? Или это убьет и деятельность, и службу, и, следовательно, также процесс? Есть ли какой-нибудь способ убедиться, что служба продолжает работать в том же процессе после завершения действия? Но способ не так сложен, как вся помощь для удаленных процессов?

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

1 Ответ

1 голос
/ 26 августа 2010

Когда пользователь нажимает кнопку back, это отличается от того, когда система завершает процесс, в котором запущено приложение. Текущий activity будет finish(), но процесс остается активным.Android, если позволяет память, будет поддерживать службу в активном режиме независимо от того, видна ли активность.

Из документов

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

Однако службы НЕ должны оставаться в памяти навсегда, это плохая практикаи не совсем то, что вы хотите.Я бы порекомендовал использовать IntentService в сочетании для получения обновлений местоположения через LocationListener и LocationManager ссылку на документы

public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)

Эта установка должна служить вам достаточно хорошо, потому что на каждомОбновление вы можете запустить Intent, который может обрабатываться вашим Service, если он не жив, он будет создан.

...