Я получил немного смущен о различиях между Handlers
, AsyncTask
иThreads
в Android. Я прочитал немало блогов и вопросов здесь, в StackOverflow.
Handler
являются фоновыми потоками, которые предоставляют вам возможность общаться с пользовательским интерфейсом. Например, обновление индикатора выполнения должно выполняться через Handler
. Используя обработчики, у вас есть преимущество MessagingQueues
, так что если вы хотите запланировать сообщения или обновить несколько элементов пользовательского интерфейса или иметь повторяющиеся задачи.
AsyncTask
они похожи, фактически они используют Handler
, но не работают в потоке пользовательского интерфейса, так что это хорошо для извлечения данных, например для извлечения веб-сервисов. Позже вы можете взаимодействовать с пользовательским интерфейсом.
Thread
однако не может взаимодействовать с пользовательским интерфейсом, обеспечить более «базовую» многопоточность, и вы пропустите все абстракции AsyncTask
.
Тем не менее, я хотел бы, чтобы соединение с сокетом работало. Должно ли это быть выполнено в обработчике или потоке, или дажеAsyncTask
? Взаимодействие с интерфейсом вообще не нужно. Имеет ли это значение с точки зрения производительности, которую я использую?
Между тем, документация была значительно улучшена.
Handler
не является потоком, и он ничего не выполняет. Это всего лишь средство для безопасной передачи сообщений из одного потока в очередь сообщений другого потока . Таким образом, обычно (по крайней мере) еще два потока должны быть созданы, которые затем могут использовать обработчик, но обработчик не может ничего выполнить сам.