Я смущен относительно того, когда можно было бы предпочесть AsyncTask Обработчику. Скажите, что у меня есть некоторый код, который я хочу выполнить каждый n секунды, которые обновят UI. Почему я выбрал бы один по другому?
IMO, AsyncTask был написан, чтобы обеспечить удобный, простой в использовании способ достижения фоновой обработки в приложениях Android, не беспокоясь о низком уровне сведения об уровне (потоки, циклы сообщений и т. д.). Он предоставляет методы обратного вызова, которые помогают планировать задачи, а также легко обновлять пользовательский интерфейс, когда это необходимо.
Однако важно отметить, что при использовании AsyncTask разработчик подчиняется его ограничениям, которые возникли из-за проектных решений, принятых автором класса. Например, Недавно я обнаружил, что существует ограничение на количество заданий, которые можно запланировать с помощью AsyncTasks.
Handler более прозрачен из двух и, вероятно, дает вам больше свободы; поэтому, если вам нужен больший контроль над вещами, вы должны выбрать Handler, иначе AsynTask будет работать нормально.
Если вы хотите выполнять вычисления каждые x секунд, вам, вероятно, следует запланировать Runnable
для Handler
(с postDelayed ()
) и что Runnable
должен запускаться в текущем пользовательском интерфейсе нить. Если вы хотите запустить его в другом потоке, используйте HandlerThread.
AsyncTask проще в использовании, но не лучше, чем обработчик.
Мое эмпирическое правило:
Если вы делаете что-то изолированное, связанное с UI, например, загружаете данные для представления в списке, используйте AsyncTask
.
Если вы выполняете несколько повторяющихся задач, например, загружаете несколько изображений, которые должны отображаться в ImageViews
(например, загружаете миниатюры) после загрузки, используйте очередь задач с Handler
.