Я отримав трохи збентежений про відмінності між Handlers
, AsyncTask
і Threads
в Android. Я прочитав досить багато блогів та запитань тут у StackOverflow.
Handler
- фонові потоки, які надають вам змогу спілкуватися з інтерфейсом користувача. Наприклад, оновлення рядка прогресу повинно бути здійснено через Handler
. Використовуючи обробники, ви маєте перевагу MessagingQueues
, тому якщо ви хочете запланувати повідомлення або оновити кілька елементів інтерфейсу або мати завдання, що повторюються.
AsyncTask
насправді вони подібні, вони використовують Handler
, але не працюють в потоці інтерфейсу, тому це добре для отримання даних, наприклад, отримання веб-служб. Пізніше ви можете взаємодіяти з інтерфейсом користувача.
Thread
однак не може взаємодіяти з користувальницьким інтерфейсом, надавати більш "базові" нарізки, і ви пропускаєте всі абстракції AsyncTask
.
Однак я хотів би, щоб у роботі було встановлено з'єднання з розеткою. Чи слід це запускати в обробнику чи потоці, а то й у AsyncTask
? Взаємодія інтерфейсу взагалі не потрібна. Чи має значення зміна продуктивності, яку я використовую?
Тим часом документація значно покращилась.
Handler
не є потоком, і він нічого не виконує. Це лише засіб безпечно передавати повідомлення з однієї нитки до черги повідомлень іншої нитки . Отже, як правило, повинні бути створені (принаймні) два потоки, які потім можуть використовувати обробник, але обробник нічого не може виконати сам.