Кто-то может сказать мне различие TRUE?
Мое практическое правило: AsyncTask
используется, когда я хочу сделать что-то, связанное с одним Activity
, а Service
- для тех случаев, когда я хочу сделать что-то, что будет продолжаться после того, как действие, которое было запущено, находится в фоновом режиме.
Поэтому, если я хочу выполнить небольшую фоновую обработку в Activity
, не связывая пользовательский интерфейс, я буду использовать AsyncTask
. Затем я буду использовать обработчик по умолчанию
из этого Activity
, чтобы передать сообщения обратно, чтобы гарантировать, что обновления происходят в основном потоке. Обработка обновлений в основном потоке имеет два преимущества: обновления пользовательского интерфейса происходят правильно, и вам не нужно так сильно беспокоиться о проблемах синхронизации.
Если, например, мне нужно выполнить загрузку, которая может занять некоторое время, я воспользуюсь службой
. Поэтому, если я перейду к другому Activity
в моем приложении или полностью другому приложению, моя Service
сможет продолжать работать и загружать файл, чтобы он был готов, когда я вернусь в свое приложение. В этом случае я бы, вероятно, использовал Уведомление в строке состояния после завершения загрузки, чтобы пользователь мог вернуться к моему приложению в любое удобное для него время.
Что вы обнаружите, если используете AsyncTask
для длительного процесса, он может продолжиться после того, как вы уйдете от Activity
, но:
Действие
находится в фоновом режиме, когда ваша обработка завершена, у вас могут возникнуть проблемы при попытке обновить пользовательский интерфейс с результатами и т. Д. действие
гораздо более вероятно убивается Android, когда ему нужна память, а не Служба
. Используйте службу , когда вы у меня есть что-то, что должно работать в фоновом режиме в течение длительных периодов времени. Это не связано с какой-либо деятельностью. Канонический пример - музыкальный проигрыватель.
AsyncTask отлично подходит, когда некоторые вещи нужно делать в фоновом режиме во время текущего действия. Например. загрузка, поиск текста внутри файла и т. д.
Лично я использую Обработчики только для публикации изменений в потоке пользовательского интерфейса. Например. вы выполняете некоторые вычисления в фоновом потоке и публикуете результат через обработчик.
Итог: в большинстве случаев AsyncTask - это то, что вам нужно.