Обслуживание с помощью AsyncTask

Я слышал, что неплохо иметь асинхронную задачу в сервисе.

Действительно ли это необходимо для AsyncTask или просто для onStartCommand() ?

Мне интересно, потому что у меня есть Service с AsyncTask которая запускается при тревоге. И он запускает Service более одного раза; Он должен только запускаться один раз.

Может ли это быть причиной?

РЕДАКТИРОВАТЬ:

Вот как я настраивал будильник.

  String alarm = Context.ALARM_SERVICE; AlarmManager am = (AlarmManager)getSystemService(alarm); Intent Aintent = new Intent("REFRESH_THIS"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, Aintent, 0); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.HOUR_OF_DAY, 9); calendar.add(Calendar.MINUTE, 0); calendar.add(Calendar.SECOND, 0); calendar.add(Calendar.MILLISECOND, 0); am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, pi); 

Если у вас есть длительная работа в службе, рассмотрите возможность использования IntentService , она запустит и управляет фоновым потоком для вас. И это имеет дополнительное преимущество, которое он закрывает, когда закончил автоматически. Вы можете добиться чего-то подобного с помощью AsyncTask , но IntentService пойдет правильно.

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

Нет ничего плохого, если вы хотите использовать AsyncTask в сервисе. Хорошо, если вы используете asynctask в сервисе, потому что служба запускается в основном потоке, так что если вы используете длительный процесс из службы, это может замедлить ваш интерфейс.

Вы также можете создать Thread и работать над этим.

Существует способ иметь больший контроль над потоками и задачами, особенно если вам нужно выполнить разные в определенном порядке. Существует хороший подход к управлению всей системой, используя очереди, исполнители пула потоков, runnables / callables и службу. http://ugiagonzalez.com/2012/07/02/theres-life-after-asynctasks-in-android/