Преобразование активности в службу (Android)

1

Я разрабатываю приложение, предназначенное для получения информации о местоположении пользователей и текущей погоде. Информация собирается таким образом: StartGathering → Get lat/long → Получить данные о местоположении (город, адрес и т.д.) Из коордов → Получить информацию о погоде → Сохранить информацию в базе данных SQL. Все делается путем отправки строкового массива с использованием пакета между различными действиями, содержащими данные. Чтобы это было точно, процесс повторяется каждые X минут, но поскольку я работал с действиями, процесс обновления мешает другим приложениям на устройстве. Я добавил android: theme = "@android: style/Theme.NoDisplay" для каждого из действий в процессе, думая, что это будет то же самое, что делать это в фоновом режиме. Я хочу, чтобы информация собиралась и сохранялась в базе данных в фоновом режиме, и насколько я знаю, это невозможно без использования служб.

Есть ли способ легко конвертировать кучу различных видов деятельности в службы и, таким образом, позволяет приложению собирать необходимую информацию в фоновом режиме, чтобы пользователь мог использовать устройство без потери производительности? Или возможно ли, чтобы деятельность выполняла некоторую работу в фоновом режиме, не мешая другим приложениям?

  • 0
    Понятия не имею, как буквально это сделать. но я хотел бы попробовать запустить асинхронную задачу и сделать цикл после того, как это завершит основное намерение. Я не знаю, работает ли это, но я просто попробую :)
Теги:
android-activity
service

2 ответа

3

Есть ли способ легко конвертировать кучу различных видов деятельности в службы...

Нет, создайте Service (или Services) и скопируйте/вставьте свой существующий код. Имейте в виду, что Service работает в основном потоке приложения (иначе как поток пользовательского интерфейса), поэтому, если вам потребуется трудоемкая работа, вы будете необходимо использовать рабочие потоки или, возможно, использовать IntentService который работает по умолчанию в фоновом/рабочем потоке.

Или возможно ли, чтобы деятельность выполняла некоторую работу в фоновом режиме, не мешая другим приложениям?

Нет, не так, как вы пытаетесь это сделать. Подумайте о том, что Activity аналогична форме Windows (или аналогичной). Другими словами, это среда для пользовательского интерфейса, позволяющая пользователю взаимодействовать с приложением. Существуют способы выполнения фоновой работы в Activity (например, с использованием AsyncTask), но Activity не является общим классом, который может быть скрыт, в то время как он выполняет некоторый "хруст".

  • 0
    Спасибо за ваш ответ! Могу ли я использовать те же методы и отправлять / получать пакеты при работе со службами? И могу ли я по-прежнему программировать таким же образом, что один сервис выполняет некоторую работу, и перед тем, как сам себя уничтожить, он отправляет пакет другому сервису, который выполняет некоторую другую работу с информацией из предыдущего?
  • 0
    @Eric: Да, Service может запускаться или связываться с другим Service . Что касается передачи данных, Android широко использует Intents для передачи действий и передачи данных между различными компонентами приложения. Интересно, действительно ли вам нужно более одного Service ? Если процесс «сбора» вашего приложения всегда должен выполняться с помощью фиксированных шагов, которые вы описываете, то почему бы не сделать это в рамках всего одного Service ? Единственная причина иметь несколько Services состоит в том, что каждый из них выполняет уникальную функцию, которая может быть непосредственно использована для других компонентов приложения.
2

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

Если ваша программа что-то делает, вы вызываете "потерю производительности", возможно, не значимую или заметную (для пользователя), но, тем не менее, потерю. Мне кажется, что то, что вы пытаетесь сделать (получить местоположение и сделать веб-запрос для получения информации о погоде, связанной с местоположением каждые X минут), приведет к значительному истощению батареи в зависимости от того, какое время вы используете. Я предлагаю вам оставить интервал времени вашим пользователям, если вы не хотите, чтобы они жаловались на то, что ваше приложение разряжает батарею.

  • 0
    Я имел в виду «без существенной потери производительности». Когда я тестировал приложение на своем телефоне, и оно собирало информацию о действиях, было практически невозможно использовать его одновременно. Конечно, пользователь сможет настроить, как часто он будет собирать информацию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню