Есть несколько соображений, которые вы должны взвесить, чтобы лучше решить, как подходить к вашей ситуации.Похоже, вам нужно хорошее сравнение между двумя подходами ... Итак, вот список сходств, а также различий и дополнительных соображений, которые необходимо учитывать при работе на портативном устройстве.
Службачасть вашего приложения, которая не имеет пользовательского интерфейса.Он может быть вызван пользовательским интерфейсом (Activity) для запуска или может быть запущен любым другим компонентом вашего Приложения.При разработке у вас есть свобода размещать его в другом потоке или даже запускать в другой задаче или процессе.Это позволяет в конечном итоге отделить его от вашего пользовательского интерфейса.Кроме того, вы можете запустить Службу для запуска самостоятельно (startService) или привязать к ней свою деятельность (bindService) в зависимости от ваших потребностей.Используя пользовательские обработчики, вы можете установить обратные вызовы для обновления пользовательского интерфейса с вашим прогрессом.Служба не обязательно завершается, если Пользователь изменяет Операции, но может быть завершена в ЛЮБОЕ время ОС.
AsyncTask всегда создается из потока пользовательского интерфейса.Он допускает только определенные обратные вызовы, но упрощает процесс многопоточности для целей относительно коротких транзакций (по сравнению с выделенными отдельными многопоточными службами), которые по своей природе связаны с действиями, выполняемыми действием.Всякий раз, когда пользователь меняет активность, AsyncTask ставится на «паузу» и может даже умереть, потому что больше нет потока пользовательского интерфейса для вашей активности.
Больше всего меня беспокоит, если приложениеесли в первый раз это займет 10–20 минут, я предположу, что пользователь либо временно поменяет задачи, либо выключит телефон до его завершения (что может вызвать все те же осложнения, если телефон спит).Учитывая это соображение, многопоточный сервис, связанный с вашей деятельностью, может быть вашим лучшим выбором.Чтобы защитить ваш пользовательский интерфейс, я бы сделал диалог прогресса для вашей активности, который получает ваши обратные вызовы прогресса.Это ограничивает пользовательский ввод в ВАШЕМ приложении и позволяет вашему сервису продолжать работать так, как ему нужно.Затем переопределите Activity onResume, чтобы проверить состояние вашей службы и работает ли она.Затем вы можете немедленно сбросить диалог.
Учитывая, что это мой предпочтительный метод, я бы также принял во внимание, что ОС в любом случае может убить приложение.Поэтому убедитесь, что у вас есть какой-то способ обнаружить неполную или частичную синхронизацию.Затем вы можете возобновить работу автоматически после перезапуска вашей активности или службы.