Коли ви проводите програму зі списку запущених програм Android, що саме відбувається з програмою та даними? Читайте далі, коли ми розслідуємо.
Сьогоднішня сесія запитань і відповідей надійшла до нас люб’язно від Android Enthusiast - підрозділу Stack Exchange, що управляється спільнотою групи веб-сайтів із запитаннями та відповідями.
Питання
Читач Android-ентузіастів Eldarerathis цікавиться функцією проведення пальцем по додатку, яка дозволяє створити список запущених програм за допомогою кнопки головного екрана, а потім провести їх праворуч, імовірно, щоб закрити їх:
Нещодавній список додатків у Ice Cream Sandwich додав можливість стирати програми зі списку, тим самим відмовляючись від них назавжди (і, наскільки мені відомо, це функція ванілі, а не CM / спеціальна ПЗУ). Документація та основні моменти платформи, схоже, не охоплюють роботу цієї функції, але мені цікаво дізнатись, чим насправді займається система.
Подальше допитуючи, я вирішив зробити швидкий тест: запустив музику під інсталяцію CM9, а потім відмовився від неї. Потім я перевірив список нещодавніх програм і переконався, що він справді є (і в належному стані, на основі ескізу). Потім я зайшов
Налаштування-> Програмиі сила зупинили програму Music, але вона все ще була в недавньому списку, що змусило мене думати, що вона не пов’язана з процесами, що затримуються у фоновому режимі.Зрозумівши, що Музика, можливо, був поганим вибором, я також протестував за допомогою програми USA Today. Це демонструвало в основному однакову поведінку, і здавалося, що його змусили “перезапустити” після зупинки сили (що має сенс), хоча ескіз у недавньому списку програм цього не відображав (кешований, я здогадуюсь?)
Отже, що насправді відбувається на рівні ОС, коли ви проводите програму з недавнього списку? Це просто очищає дані програми з оперативної пам'яті, а сміття збирає їх, руйнуючи збережений стан?
Що саме відбувається, коли ви проводите програму зі списку?
Відповіді
Співавтор Android-ентузіастів, Остін Міллс, пропонує деяку інформацію:
Переміщення програм із останнього списку програм - це ваніль, і так, це недостатньо добре задокументовано. Це була тема пристойних обговорень на різних форумах Android ... консенсус, здається, найкраще описаний тут у деяких коментарях : що поведінка схожа, але не зовсім така, як закриття програми - загалом (для додатків, які не визначають явної обробки кнопок повернення назад), це те саме, що робити достатню кількість разів у відповідь із програми, з якої ви виходите це.
Посилання містить детальну інформацію про особливості, але загалом ви можете вважати це виходом із програми.
Я вважаю, що для програми «Музика» вона запускає службу, тому, хоча саме завдання (додаток / інтерфейс «Музика») може бути закритим, служба продовжує працювати у фоновому режимі, щоб ваша музика раптово не зупинялася лише тому, що завдання був очищений з міркувань управління пам’яттю. Це могло вплинути на те, що ви бачили.
Потім, беручи участь у життєвому колі, Ельдарератіс повернувся із власними дослідженнями, щоб завершити відповідь:
Здається, я знайшов чарівні пошукові терміни, які призвели до деяких пояснень від співробітників Google. Зокрема, я знайшов кілька різних місць, де Діанн Хекборн пояснює, що відбувається, коли ви стискаєте щось із недавнього списку. Перший - це коментар до однієї з її публікацій у Google+ :
[W], що конкретно трапляється, коли ви змахнете недавнє завдання, це: (1) вбиває будь-який фоновий або порожній процеси програми (див. тут для чого це означає), а (2) використовує нове ПОЖЕЖ повідомляти будь-які служби програми про видалене завдання, щоб він міг робити все, що вважає за потрібне.
Вона також нотатки в коментарі до блогу :
Насправді, видалення запису в останніх завданнях призведе до знищення всіх фонових процесів, які існують для цього процесу. Це безпосередньо не призведе до зупинки служб, однак існує API для них, щоб дізнатися, що завдання було видалено, щоб вирішити, чи хочуть вони це означати, що вони повинні зупинитись. Це зроблено для того, щоб видалити, скажімо, недавнє завдання програми електронної пошти, не призвело до того, що вона припинить перевірку електронної пошти.
Якщо ви дійсно хочете повністю зупинити програму, ви можете довго натискати на останні завдання, щоб перейти до інформації про програму, і натиснути кнопку "Зупинити". Примусова зупинка - це повне вбивство програми - усі процеси вбиваються, усі служби зупиняються, усі сповіщення вилучаються, усі будильники вилучаються тощо. Додаток не може повторно запускатися, поки не буде явно запитано.
Отже, схоже, підсумок полягає в тому, що зведення програми зі списку спочатку вбиває всі фонові процеси для програми, а потім використовує
onTaskRemovedщоб повідомити програму про те, що фонове завдання було видалено. На той момент здається, що додаток сам вирішує, що станеться, тому я думаю, що це технічно не є жорстке правило про те, що відбувається з додатком поза цим пунктом.