У чому різниця між службою, задачею Async & Thread. Якщо я не помиляюся, усі вони використовуються, щоб робити якісь речі у фоновому режимі. Отже, як вирішити, що використовувати і коли?
У чому різниця між службою, задачею Async & Thread. Якщо я не помиляюся, усі вони використовуються, щоб робити якісь речі у фоновому режимі. Отже, як вирішити, що використовувати і коли?
Відповіді:
Напевно, ви вже прочитали опис документації про них, я їх не повторюватиму, натомість спробую дати відповідь власними словами, сподіваюся, що вони допоможуть вам.
Сервіс схожий на Діяльність, але не має інтерфейсу користувача. Можливо, якщо ви хочете, наприклад, взяти погоду, ви не створите для неї порожню активність, для цього ви скористаєтеся Сервісом.
Нитка - це нитка, напевно, ви її вже знаєте з іншої частини. Потрібно знати, що ви не можете оновити інтерфейс користувача з теми. Для цього вам потрібно використовувати обробник, але читати далі.
AsyncTask - це інтелектуальна нитка, яку рекомендується використовувати. Розумні, як це може допомогти з його методами, є три методи, які працюють на потоці інтерфейсу, що добре оновлювати компоненти інтерфейсу.
Я часто використовую Послуги, AsyncTasks. Нитки менше, або зовсім не такі, оскільки я можу зробити майже все з AsyncTask.
Це найпростіша відповідь на ваше запитання
Нитка
це одиниця виконання, яка виконує "паралельно" до головної нитки - важливий момент, ви не можете оновлювати компонент інтерфейсу з жодного потоку тут, крім основного потоку.
AsyncTask
це спеціальна нитка, яка дає вам допоміжні методи для оновлення інтерфейсу користувача, тому в основному ви можете оновити інтерфейс, навіть AsyncTask буде працювати на фоновому потоці. Міжпроцесовий зв'язок не повинен здійснюватися явно.
Сервіс
Вирішіть вищезгадану проблему, оскільки вона живе окремо від активності, яка викликає її, щоб вона могла продовжувати працювати навіть тоді, коли діяльність знищена, вона запускається в головній нитці (остерігайтесь ANR), використовуючи фонову службу (розширіть IntentService, вона автоматично створить робочу нитку для вас) . Сервіс - це як діяльність без інтерфейсу користувача , добре підходить для тривалих завдань
Ще небагато інформації, яку я хотів би, щоб хтось сказав мені кілька днів тому:
Мій випадок використання виглядає так: у мене є один потік у глобальному просторі, який підключений до сервера, і Діяльність, яка показує результати. Коли користувач натискає кнопку додому, Активність переходить на другий план і починається нова Служба. Потім ця служба зчитує результати з потоку та відображає інформацію в області повідомлень, коли це необхідно. Я не переживаю за те, що ОС знищить мою активність, тому що я знаю, що, поки Служба працює, вона виграє нитку.
З точки зору розробника:
Нитка : використовується для виконання набору кодів паралельно основній темі. Але ви не можете обробити інтерфейс користувача всередині потоку. Для цього вам потрібно скористатися Handler
. Адлер працює як нитка, але також може працювати з інтерфейсом користувача.
ASyncTask : використовується для обробки тих завдань, які ви не можете змусити працювати над основною темою. Наприклад, HTTP-запит - це дуже важка робота, яку неможливо обробити в основному потоці, тому ви обробляєте HTTP-запит у розділі ASyncTask
Це працює паралельно з вашим основним потоком асинхронно у фоновому режимі. У нього є кілька методів зворотного виклику, які викликаються відповідними події.
Сервіс : це фоновий процес. Він використовується, коли ви повинні виконати деяку обробку, яка не має з ним пов'язаного інтерфейсу.
Service
не потрібно працювати у фоновому режимі, якщо ви не використовуєте IntentService
. Якщо ви запустили стандарт Service
з UiThread, він запуститься на UiThread.
Service
не запускається в іншому процесі за замовчуванням, але в додатку з іншими компонентами. Краще сказати, що він Service
буде працювати на тлі потоку, що він живе всередині.