2014-08-29 4 views
4

У меня есть фоновое обслуживание, и я выполняю все операции над этим сервисом.
Служба работает с мероприятиями в разы. Но если приложение закрывается, перезапуск службы выполняется с START_STICKY; Он работает правильно, но иногда требуется много времени для перезапуска, например, больше минуты.Почему так медленно перезагружается служба Android с помощью START_STICKY?

@Override 
public void onCreate() { 
    SocketIOConnect(); 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) {  
    return START_STICKY; 
} 

Как уменьшить время перезапуска?

+0

скорее всего SocketIOConnect(); занимает так долго – pskink

+0

Я пробовал без этой функции. Я пробовал пустую службу. Но такой же результат. :/ – erginduran

ответ

1

Как уменьшить время перезапуска?

Вы не контролируете это. Это зависит от ОС, чтобы определить, когда она перезапустит службы, процессы которых были прекращены по той или иной причине.

Помните, что ваше обслуживание может быть never перезапуск, если пользователь принудительно остановил ваше приложение (например, из настроек).

1

Вы не можете контролировать это. Но, однако, я мог бы предложить некоторые хорошие практики.

  • Вы должны вызвать super.onCreate(); первый перед вызовом других методов внутри вашего метода overrided.
  • Если ваш service class является extended от IntentService class, и если вы решите также override другие методы обратного вызова, такие как onCreate(), onStartCommand() или onDestroy(), обязательно вызовите super реализацию, так что IntentService может правильно обрабатывать жизни рабочий поток. check from android developer side

Вы можете вызвать super.onStartCommand() следующим образом:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, START_STICKY, startId); 
    return START_STICKY; 
} 
  • Постоянная переменная START_STICKY позволит, запущенная на неопределенное время, пока вы явно не вызовете stopService() или stopSelf(). Поэтому убедитесь, что у вас есть возможность остановить его, иначе вам придется принудительно остановить его с Настройки приложения.
  • Вы можете добавить категорию TAG к своей службе перед запуском, чтобы вы могли использовать эту TAG для уникально идентифицировать и останавливать службу извне, вызывая метод stopService().

сервис Начиная

serviceIntent = new Intent(MainActivity.this, MyService.class); 
       serviceIntent.addCategory(MYTAG); 
       startService(serviceIntent); 

Остановка службы

serviceIntent = new Intent(MainActivity.this, MyService.class); 
        serviceIntent.addCategory(MYTAG); 
        stopService(serviceIntent);