2013-06-17 2 views
4

Могу ли я запустить фоновое обслуживание бесконечно? Будет ли андроид убить мою службу, если я запустил ее на неопределенное время? Как приложение Android android постоянно работает в фоновом режиме? пожалуйста, помогите мне узнать об этом.Возможно ли запустить мой сервис на неопределенное время?

ответ

4

Вы можете использовать для этого этих функций:

1) Автоматического перезапуска службы после перезагрузки (Start intent after Reboot)

2) Sticky сервисного режима (http://developer.android.com/reference/android/app/Service.html#START_STICKY)

Этих функций и помогает оставить ваш сервис начал все время, насколько это возможно.

+0

Спасибо Dimmerg, это помогло мне до некоторой степени. Но мое приложение убивается андроидом из-за недостаточной памяти. Как я могу решить эту проблему. –

+0

У вашей службы много памяти? Какие операции вы выполняете в этой службе? – Dimmerg

+0

В моем сервисе я храню фреймы с ip-камеры в моей Wi-Fi сети. и это также снижает скорость моего устройства. –

3

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

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

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

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

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

Флаги могут быть использованы следующим образом:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
//Do your service work 
return START_STICKY; //or return START_REDELIVER_INTENT; 
} 

В зависимости от того, что вам нужно использовать один или другой.

Надеется, что это помогает :)

+0

Спасибо zozelfelfo, это очень помогло мне.У меня есть вопрос для вас, если я запускаю несколько потоков и несколько служб в моем приложении, моя производительность моего устройства снизится? Помогите мне в этом вопросе –

+0

Это зависит от того, что делают потоки/службы и скорость устройства, но, скорее всего, будет заметное падение скорости. – Boardy

+0

Я установил приложение facebook. в моем устройстве он работает отлично и даже не убит андроидом и не снижает производительность моего устройства. Как я могу достичь этой оптимизации в своем приложении .help me –

0

Там нет никакого способа, чтобы полностью защитить службу от гибели.

Если вы вернетесь START_STICKY из onStartCommand(), то даже если служба будет убита, андроид постарается сделать все возможное, чтобы запустить ее снова, когда ресурсы бесплатны.