Я разрабатываю приложение, предназначенное для получения информации о местоположении пользователей и текущей погоде. Информация собирается таким образом: StartGathering → Get lat/long → Получить данные о местоположении (город, адрес и т.д.) Из коордов → Получить информацию о погоде → Сохранить информацию в базе данных SQL. Все делается путем отправки строкового массива с использованием пакета между различными действиями, содержащими данные. Чтобы это было точно, процесс повторяется каждые X минут, но поскольку я работал с действиями, процесс обновления мешает другим приложениям на устройстве. Я добавил android: theme = "@android: style/Theme.NoDisplay" для каждого из действий в процессе, думая, что это будет то же самое, что делать это в фоновом режиме. Я хочу, чтобы информация собиралась и сохранялась в базе данных в фоновом режиме, и насколько я знаю, это невозможно без использования служб.
Есть ли способ легко конвертировать кучу различных видов деятельности в службы и, таким образом, позволяет приложению собирать необходимую информацию в фоновом режиме, чтобы пользователь мог использовать устройство без потери производительности? Или возможно ли, чтобы деятельность выполняла некоторую работу в фоновом режиме, не мешая другим приложениям?
Есть ли способ легко конвертировать кучу различных видов деятельности в службы...
Нет, создайте Service
(или Services
) и скопируйте/вставьте свой существующий код. Имейте в виду, что Service
работает в основном потоке приложения (иначе как поток пользовательского интерфейса), поэтому, если вам потребуется трудоемкая работа, вы будете необходимо использовать рабочие потоки или, возможно, использовать IntentService
который работает по умолчанию в фоновом/рабочем потоке.
Или возможно ли, чтобы деятельность выполняла некоторую работу в фоновом режиме, не мешая другим приложениям?
Нет, не так, как вы пытаетесь это сделать. Подумайте о том, что Activity
аналогична форме Windows (или аналогичной). Другими словами, это среда для пользовательского интерфейса, позволяющая пользователю взаимодействовать с приложением. Существуют способы выполнения фоновой работы в Activity
(например, с использованием AsyncTask
), но Activity
не является общим классом, который может быть скрыт, в то время как он выполняет некоторый "хруст".
Service
может запускаться или связываться с другим Service
. Что касается передачи данных, Android широко использует Intents
для передачи действий и передачи данных между различными компонентами приложения. Интересно, действительно ли вам нужно более одного Service
? Если процесс «сбора» вашего приложения всегда должен выполняться с помощью фиксированных шагов, которые вы описываете, то почему бы не сделать это в рамках всего одного Service
? Единственная причина иметь несколько Services
состоит в том, что каждый из них выполняет уникальную функцию, которая может быть непосредственно использована для других компонентов приложения.
позволяя приложению собирать необходимую информацию в фоновом режиме, чтобы пользователь мог использовать устройство без потери производительности
Если ваша программа что-то делает, вы вызываете "потерю производительности", возможно, не значимую или заметную (для пользователя), но, тем не менее, потерю. Мне кажется, что то, что вы пытаетесь сделать (получить местоположение и сделать веб-запрос для получения информации о погоде, связанной с местоположением каждые X минут), приведет к значительному истощению батареи в зависимости от того, какое время вы используете. Я предлагаю вам оставить интервал времени вашим пользователям, если вы не хотите, чтобы они жаловались на то, что ваше приложение разряжает батарею.