Яка різниця між послугою та приймачем широкомовної програми?


14

Я постійно чую про послуги та приймачі мовлення . Яка різниця між ними, і як вони впливають на роботу мого Android-телефону з моєї точки зору?


Ви знаєте, замість того, щоб створювати порти на шарі TCP, ми завжди створюємо широкомовні приймачі, щоб заощадити акумулятор і багато обробки. Коли якась подія трапляється в android .... трансляція надсилається в межах телефону всім програмам. записати приймач трансляції на цю подію ,,, він буде автоматично викликаний. Технічно подію, що сталася, називають наміром з точки зору андроїда
Рахул Райна

Відповіді:


27

У додатках для Android є три види компонентів. Як правило, користувачам не потрібно знати про них: вони є способом для авторів програм програмувати певні форми поведінки у своїх додатках. Але якщо ви уважно стежите за поведінкою ваших додатків, наприклад, з диспетчером завдань, або якщо ви автоматизуєте роботи за допомогою програми, наприклад Tasker, корисно зрозуміти, як вони вписуються в систему.

Діяльність є найбільш відомим типом компонента: це вікно ви можете побачити: або повний екран або діалог розміру. Діяльність виконується лише під час відображення на екрані. Після того, як ви вийдете з програми, Android збереже цей додаток у пам’яті готовим до запуску знову, але ця дія не запуститься, це означає, що він не використовуватиме батарею чи мережу. Додаток починає діяльність з використанням наміру . У намірі можна чітко вказати, яку діяльність розпочати, або він може вказати дію, яку потрібно виконати (наприклад, відкриття певного файлу). Якщо більш ніж одна діяльність може "впоратися" з наміром, ви побачите діалогове вікно з проханням вибрати його.

Сервіс є ще одним компонентом програми. Після того, як інший компонент (можливо, діяльність чи інша служба) запустив послугу, він працює у фоновому режимі, поки він не зупиняється. Це означає, що послуга може підтримувати телефон у режимі неспання (за допомогою блокування блокування будильника ), заряджання акумулятора або використання багатьох мережевих даних, не показуючи нічого на екрані.

Програми можуть використовувати сервіси для виконання тривалих процесів у фоновому режимі, таких як завантаження файлів із сервера, перевірка електронної пошти чи перевірка вашого місцезнаходження. Хоча служби не відображаються та не взаємодіють із вами безпосередньо, вони все ще відображаються у списку "Запуск програм". У додатку Налаштування виберіть Менеджер програм або програм , а потім Запуск . Ви можете зупинити послугу таким чином, але зазвичай це не потрібно. Оскільки сервіси не видно безпосередньо, Android вважає їх менш важливими, ніж діяльність, тому вони вперше будуть вбиті, коли вашому телефону потрібно більше пам’яті.

Транслятори приймачів є третім різновидом компонента. Як і сервіси, вони існують лише у фоновому режимі і не взаємодіють з вами безпосередньо. Але на відміну від служб, вони не можуть працювати і виконувати довгі завдання: вони існують, щоб реагувати на події. І на відміну від діяльності та послуг, більше одного приймача радіомовлення можна запустити за один раз.

Компонент передає намір, можливо, одному додатку, але частіше, не вказуючи конкретний додаток. У цьому випадку цей намір зазвичай представляє подію, яка сталася, наприклад, розряджений заряд акумулятора. Система знаходить усі приймачі широкомовної програми, які зареєстрували інтерес (використовуючи фільтр намірів ), і працює кожен по черзі. Кожен приймач широкомовного зв'язку може негайно реагувати, наприклад, створивши сповіщення, або він може запустити послугу чи діяльність для подальшого вжиття дій. Як тільки приймач широкомовної передачі обробляє подію, вона зупиняється і не запускається знову, поки не буде показано інше подібне подія.

Приклад усіх трьох компонентів, які працюють разом, - це завантаження програми з Google Play. По-перше, діяльність Google Play надає вам візуальний інтерфейс для вибору вмісту для завантаження. У списку програм може бути одна діяльність; натискання кнопки «Встановити» починає іншу діяльність, щоб відобразити діалогове вікно підтвердження або оплати. Після підтвердження діалогова активність запускає послугу. Служба продовжить завантажувати вміст навіть тоді, коли діяльність закінчиться і більше не працює.

Але, можливо, телефон втрачає Інтернет-з'єднання під час завантаження нового додатка. Якщо це трапиться, служба завантаження Google Play зареєструє приймач широкомовної програми з фільтром намірів, який скаже, що він зацікавлений у зміні підключення до мережі, і тоді служба припинить себе. Коли телефон підключається до Інтернету, система транслює подію. Android запустить транслятор, який зареєстрував сервіс Google Play, а також будь-який інший приймач, який чекає цієї події. У цьому випадку приймач широкомовної програми знову запустить послугу завантаження. По мірі завантаження сервіс створюватиме сповіщення, а після завершення він надсилатиме власну трансляцію інформувати інші додатки про встановлення нового пакету, а потім зупиняється. У свою чергу, це розпочне трансляцію приймачів з інших програм,

Підсумовуючи:

  • Діяльність представляє вікно на екрані; сервіс виконує можливе тривале фонове завдання; приймач широкомовної програми працює короткий час для обробки події.
  • Усі три починають використовувати наміри, але використовують інший механізм. Додаток, що запускає, повинен чітко вказати, який тип компонента запустити (викликаючи інший метод у кожному випадку).
  • Коли програма починає діяльність з використанням наміру, вона запускає лише одну активність (можливо, показує діалогове вікно "Завершити дію за допомогою ...", щоб ви могли вибрати, який саме), і те саме стосується служб, але трансляція наміру може почати кілька трансляцій приймачі, можливо, з різних додатків.
  • Як користувач, ви безпосередньо взаємодієте з діяльністю; ви не взаємодієте з сервісами, але вони можуть уповільнити телефон і споживати ресурси; ви не взаємодієте з приймачами широкомовного зв'язку, і оскільки вони нетривалі, вам не потрібно турбуватися про управління ними.

Дуже корисна відповідь. Я просто хочу щось підтвердити: що трапляється з програмами, які відключені користувачами? Чи запускає Android коли-небудь свій приймач широкомовної передачі для намірів, на які вони зареєстровані? Чи можуть ці відключені програми запустити свою послугу у фоновому режимі? Чому кнопка Force-Stop не затьмарена для відключених програм навіть після перезавантаження? Мені зрозуміло, що їх діяльність не може бути розпочата.
Firelord

@Firelord Якщо у вас є нове запитання, слід надіслати його як нове запитання. Коментарі не дають глибоких відповідей і не роблять ваше запитання зрозумілим для інших відвідувачів.
Ден Хулм

чудовий пост, але насправді є чотири компоненти. Відсутні провайдери вмісту.
Олександр Мартін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.