| iPhone 4S: частина друга Історія компанії HTC. Частина перша Фототест актуальних смартфонів 2011 Каталог новорічних подарунків 2012 |
Fly B500 Fly B300 Philips Xenium X622 Samsung Illusion Motorola XT615 Pantech Pocket (P9060) Samsung Galaxy S Glide Motorola Defy+ JCB Edition San Francisco II Huawei U8860 Honor BlackBerry Curve 9380 BlackBerry Bold 9790 CASIO G'zOne Ravine 2 HTC Explorer Verzo Kinzo Нові моделі: Fly B500 Fly B300 Philips Xenium X622 Samsung Illusion Motorola XT615 Pantech Pocket (P9060) Samsung Galaxy S Glide Motorola Defy + JCB Edition San Francisco II Huawei U8860 Honor BlackBerry Curve 9380 BlackBerry Bold 9790 CASIO G'zOne Ravine 2 HTC Explorer Verzo Kinzo Samsung Omnia W (GT-I8350) HTC Sensation XE Fly E175 Wi-Fi Sony Ericsson Live With Walkman (WT19i) Fly MC145 Samsung Galaxy Fit (S5670) Nokia N9 Sony Ericsson Xperia Active (ST17i) Samsung Nexus S (i9023) HTC Radar (С110e) Нові огляди: Samsung Omnia W (GT-I8350) HTC Sensation XE Fly E175 Wi-Fi Sony Ericsson Live With Walkman (WT19i) Fly MC145 Samsung Galaxy Fit (S5670) Nokia N9 Sony Ericsson Xperia Active (ST17i) Samsung Nexus S (i9023) HTC Radar (С110e) | Версія для друку Блогерам Міфи про багатозадачності і ненажерливості AndroidЦя замітка написана за мотивами подкасту Юрія Трухіна і Ельдара Муртазіна, де вони не дуже коректно висловилися про те, як влаштована багатозадачність в Android і навіщо йому «таскменеджери». Багатозадачність в Android така ж, як в підготовлюваному оновленні Mango для WP7 , з точністю до деталей реалізації і назв в архітектурних рішеннях. Некоректне розуміння багатозадачності в Android я зустрічаю досить часто і думаю, що багато в чому це вина Google, вони не можуть нормально пояснити звичайному користувачеві, як все всередині влаштовано, і що Task Manager'и здебільшого скоріше шкідливі, ніж корисні.
Отже, основний міф: якщо відкрити багато програм в Android, то скінчиться пам'ять, програми будуть жерти ресурси, а телефон почне гальмувати. Частково так, але тут є тонкий момент. Справа в тому, що всі програми для Android модульні. Тобто, програма складається з безлічі шматочків, які працюють незалежно один від одного (якщо явно не викликають інший модуль). Наявність в пам'яті програми абсолютно не означає того, що вона вся використовується в даний момент. Програма може взагалі не виконувати ніякого коду, а в пам'яті висіти просто тому, що пам'ять є, і чому б не тримати додаток в кеші, щоб подальша активація відбулася швидше. Природно, коли пам'ять буде потрібна іншу програму, саме непотрібне (є система пріоритетів) буде вивантажено. Це те ж саме, що й концепція «поховання» в WP7. В даному випадку «таскменеджери» просто шкідливі, так як вони вивантажують програми, які потім будуть завантажуватися знову, витрачаючи ресурси і час. Саме існування програми в пам'яті не гальмує телефон, звільняти пам'ять заради більшої цифри free mem - даремне заняття, від цього нічого не зміниться. ![]() Але все ж, певна дещиця правди тут є, і зараз я розповім, чому. Дана частина технічна, що описує архітектуру програм на Android. Але хочеться розповісти про внутрішній устрій, щоб у читачів склалося розуміння пристрої даної операційної системи. В Android всі модулі в програмі поділяються на три основних типи:
Розгляну їх докладніше на віртуальному прикладі музичного плеєра. ActivityЦе вікна нашого застосування. Одне вікно - одна актівіті. У нашому уявному музичному плеєрі вікно з назвою пісні, вікна з елементами управління і картинкою альбому - це актівіті. Їх час життя дуже коротке, коли ви переключаєтеся на інше вікно (навіть в межах однієї програми), то все ставиться на паузу, а через деякий час звільняються всі ресурси, і актівіті побивається. Тобто, у фоні нічого не малюється і не може малюватися. Як тільки ви переключилися з нашого плеєра, де був красивий еквалайзер, можна не турбуватися, що цей еквалайзер продовжуватиме перетворювати десь у фоні, його більше немає. Ця частина програми не працює зовсім.
Якщо програма складається тільки з актівіті (наприклад, калькулятор), то коли ми з нього перемкнулися - воно більше не їсть ніяких ресурсів. Просто сидить тихо - мирно в кеші, чекаючи, що ви повернетеся. ![]() Broadcast ReceiversТут у мене вийшла складність з нормальним перекладом цієї фрази на російську, оскільки дослівний "приймачі широкомовних повідомлень" виглядає дуже коряво, буду викручуватися по ситуації. Це частини програм, що відповідають за прийом глобальних повідомлень. Їх багато стандартних, плюс, можна очікувати абсолютно будь-яке повідомлення, сказавши про це системі (це буває корисно для зв'язку між різними програмами). Повідомлення бувають різні, наприклад, про те, що з'явилася WiFi-мережа і можна бігти в інтернет за новими піснями, вставили телефон в док-станцію - малюється гарне віконце з годинками. Натиснули кнопку паузи на гарнітурі - зупинимо відтворення. Власне, таким чином можна надіслати картинку в твіттер з галереї: твіттер реєструється на подію виду "можу нишпорити картинки", галерея посилає подію всім подібним програмам, і користувач вибирає, що він хоче зробити з картинкою. Завдяки цьому і забезпечується гнучкість Android в установці різних додатків. Даний модуль живе рівно стільки, скільки потрібно на обробку повідомлення від системи. Додаток залишається висіти в пам'яті на випадок, якщо система пошле ще одне таке ж повідомлення, і замість запуску програми заново воно буде вже в пам'яті, готове до обробки.
Але ось тут вже починаються хитрощі зі споживанням ресурсів. Якщо додаток зареєструвало себе на отримання повідомлень глобально (в маніфесті), то система буде запускати його завжди і вбивати його «таскменеджером» - шкідливо і марно. Але програма може зареєструвати себе на отримання подій програмно, тоді воно буде їх отримувати, поки запущено. Наприклад, музичний плеєр повинен отримувати події від гарнітури для управління відтворенням і ставитися на паузу у разі дзвінка. Якщо він не запущений - йому ці події не важливі, він на них не реагує. Ось тут іноді можна і вбити непотрібне додаток, якщо воно сидить і отримує повідомлення і ніяк не може вгамуватися (особливо якщо пам'яті в телефоні багато). Один із прикладів: музичний плеєр і плеєр подкастів, які, будучи запущеними разом, можуть битися за керування музикою. СервісиОсь ми і підійшли до найголовнішого споживачеві ресурсів. Послуги, ця частина програми, яка повинна працювати у фоновому режимі, і вона призначена рівно для цього і ні для чого більше. Це ось ті самі маленькі блоки, які працюють при багатозадачності і в Android, і в iOS, і в WP7 Mango.
Це сервіси синхронізації, оновлення, завантаження. Для музичного плеєра грати музику повинен саме сервіс! Навіть під час дзвінка частина програми, що відповідає за розмову - це сервіс, який потрібен, щоб розмова йшла, а користувач міг грати в Angry Birds в цей час. ![]() Власне, це і є основні споживачі ресурсів, але таскменеджери їх дуже погано визначають, краще на них дивитися в стандартних настройках додатків (Running Services). Але Android може вбивати сервіси при нестачі пам'яті теж, хоч вони і мають пріоритет по часу життя, що дивно, він потім їх постарається запустити заново, щоб повернути все як було. Найвищий пріоритет у сервісів з іконкою в статусбаре, як це безглуздо звучить. Просто ці сервіси своїм виглядом демонструють користувачеві, що вони існують і працюють, і Android їх береже до останнього. Саме тому більшість музичних плеєрів малюють іконку в статус барі, такий от архітектурний фінт вухами. Невелика ремарка про аналог сервісів в Windows Phone 7 (у прийдешньому релізі Mango), там подібний функціонал називається "Background Agents" (тобто агенти, що працюють в фоні). Агенти більш спеціалізовані та реалізуються під конкретну задачу (тобто спеціальний агент по програванню музики, спеціальний агент для скачування файлів). Є агенти для своїх завдань, але WP7 обмежує їх 10% CPU та 5 МБ пам'яті, тобто вони не можуть сильно вплинути на продуктивність телефону. У агентів є обмеження на функціонал, наприклад, вони не можуть використовувати камеру і сенсори. Тобто не можна буде зробити відеореєстратор і крокомір (GPS-можна). Агенти виводяться в окремий хост-процес, але це деталі внутрішньої організації системи. Принципово відсутній Task Manager, як результат, користувач не може насильно зупинити роботу агента. Загалом, якщо з WP7 вдаватися в деталі, то там реалізація виглядає відрізняється, але якщо дивитися очима користувача, то завдання буде вирішуватися одна й та ж: невелика частина програми, яка робить конкретну частину роботи. ВисновокВажливо розуміти, що у програм можуть працювати різні частини, з різними властивостями, і вбиваючи додаток, ви можете просто змусити систему заново завантажити його. Вбивати варто тільки кострубато написані програми (так, в маркеті з відсутністю модерації таких вистачає ). При цьому працюють тільки маленькі шматочки програм, всі інші частини сплять хорошим сном і ніяк не впливають на роботу системи. Високих Максим ( force.net @ gmail.com ) Є, що додати?! Пишіть ... eldar@ua-mobile.com | Новини: 23:10, 06 грудня: Три Android новинки від Motorola для Verizon Wireless 18:10, 06 грудня: Fly Blackbird - бізнес смартфон на Android від Fly з підтримкою двох SIM карт 17:37, 06 грудня: ZTE V881 Blade + - бюджетний Android-смартфон з великим екраном 17:20, 06 грудня: Твітні Дідові Морозу! 17:17, 06 грудня: Прибуток HTC знизилася на 30% через непопулярність моделей 16:33, 06 грудня: ASUS Padfone на платформі Nvidia Tegra 3 вийде на початку 2012 року 16:08, 06 грудня: Sony Ericsson стане просто Sony в середині 2012 року 15:40, 06 грудня: Meizu MX у продажу з 1 січня 2012 15:15, 06 грудня: Gigaset A510 IP - DECT-телефон з підтримкою фіксованого зв'язку та Інтернет-телефонії 15:00, 06 грудня: кастомізованих смартфони Samsung з безлімітним інтернетом у МТС 14:50, 06 грудня: Philips Xenium X623: довгий час автономної роботи і дві SIM-карти 1:07, 06 грудня: au by KDDI ARROW ES IS12F - водонепроникний Android смартфон для японських абонентів 19:40, 05 грудня: Підбери подарунок у Новорічному розділі! 19:21, 05 грудня: Motorola DROID RAZRMAX: новий тонкий смартфон 18:15, 05 грудня: Смартфон Sony Ericsson Xperia Nozomi і пара Sony Xperia Підписка |