остановить IntentService от активности

Мне нужна помощь в этой ситуации:

  1. У меня есть активность, которая запускает IntentService.
  2. Служба выполняет некоторую работу во время цикла и некоторое время спит.
  3. Основной цикл обслуживания бесконечен, поэтому мне нужно снова остановить его деятельность.
  4. Я должен иметь возможность завершить действие, запустить его снова и остановить IntentService из нового «экземпляра» действия.

    public class MyService extends IntentService {
    
        public MyService()
        {
            super("MyService");
        }
    
        public MyService(String name) {
            super(name);
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
            Log.d("SERVICE", "start");
    
            while(true)
            {
                SystemClock.sleep(1000);
                Log.d("SERVICE", "tick");
            }
        }
    
        @Override
        public void onDestroy() {
            Log.d("SERVICE", "end");
            super.onDestroy();
        }
    

...

Intent intent = new Intent(getApplicationContext(), MyService.class);
startService(intent);       

Я пытался позвонить stopService(), но это не работает. Есть ли решение, как это сделать? Заранее спасибо.


person skywall    schedule 28.04.2012    source источник


Ответы (1)


Служба выполняет некоторую работу во время цикла и некоторое время спит.

ИМХО, это неуместное использование IntentService. Пожалуйста, создайте обычную Service со своей собственной фоновой веткой, которой вы управляете сами.

Есть ли решение, как это сделать?

Создайте обычный Service со своим фоновым потоком, которым вы управляете сами. Например, вы можете использовать ScheduledExecutorService вместо цикла sleep(), используя shutdown() или shutdownNow() в сервисе onDestroy().

person CommonsWare    schedule 28.04.2012