Що відбувається з запущеною програмою, коли в телефоні Android натиснута кнопка «додому»?


27

Одне мене спантеличує. Схоже, якщо я використовую якусь програму на Android і натискаю кнопку "додому", я бачу головний екран і можу повторно запустити програму і побачити цю програму в тому ж стані, що і раніше - так виглядає, що програма не повністю перезапущена, просто призупинено, а потім відновлено.

Але це, здається, не відбувається послідовно з грою Air Control. Іноді, коли я граю в Air Control і натискаю "додому", а пізніше повторюю Air Control - це призупиняється (наче я натиснув кнопку "призупинити") і я можу відновити гру. Іноді те саме призводить до того, що Air Control скасує гру та починає заново.

Так виглядає, що я чогось не розумію.

Що тут угоди? Що відбувається з програмою, коли натискається "home"? Він продовжує працювати чи що робить?


Я сумніваюсь, що натискання кнопки додому призводить до більшого споживання потужності.
Потік

Відповіді:


12

Натискаючи Homeперемикає вас з програми на головний екран, залишаючи програму працювати у фоновому режимі. Це трохи схоже на перемикання між вікнами на ПК з Windows.

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

BackКнопка спосіб закривати додатки , так що вони на насправді закриті.

Дивіться також Який правильний спосіб закрити програми в Android?


26

Документ Android Development Tasks and Back Stack насправді добре висвітлює це. Відповідний уривок:

Завдання - це згуртований блок, який може перейти на "фон", коли користувачі починають нове завдання або переходять на головний екран, за допомогою клавіші HOME. Перебуваючи на задньому плані, всі дії в цьому завданні припиняються, але зворотний стек для завдання залишається недоторканим - завдання просто втрачає фокус, тоді як відбувається інше завдання, як показано на малюнку 2. Потім завдання може повернутися до " передній план ", щоб користувачі могли вибрати місце, де вони зупинилися. Припустимо, наприклад, що в поточному завданні (Завдання A) є три дії в його стеці - два під поточною діяльністю. Користувач натискає клавішу HOME, після чого запускає нову програму із запуску програми. Коли з'явиться головний екран, завдання A відходить на другий план. Коли запускається нова програма, система запускає завдання для цього додатка (Завдання B) із власним стеком дій. Після взаємодії з цим додатком користувач знову повертається додому і вибирає додаток, який було запущено. Завдання А. Тепер завдання на перший план виходить на перший план - усі три дії в його стеці є неушкодженими, а діяльність у верхній частині стеку відновляється. У цей момент користувач також може переключитися на завдання B, перейшовши додому та вибравши піктограму програми, яка розпочала це завдання (або натиснувши та утримуючи клавішу ДОМАШНЯ для виявлення останніх завдань та вибору одного з них). Це приклад багатозадачності на Android. користувач також може повернутися до завдання B, перейшовши додому та вибравши піктограму програми, яка розпочала це завдання (або натиснувши та утримуючи клавішу HOME, щоб виявити останні завдання та вибрати її). Це приклад багатозадачності на Android. користувач також може повернутися до завдання B, перейшовши додому та вибравши піктограму програми, яка розпочала це завдання (або натиснувши та утримуючи клавішу HOME, щоб виявити останні завдання та вибрати її). Це приклад багатозадачності на Android.

Примітка. Кілька завдань можна одночасно виконувати у фоновому режимі. Однак якщо користувач одночасно виконує багато фонових завдань, система може почати знищувати фонові дії для відновлення пам'яті, внаслідок чого стану активності втрачаються. Дивіться наступний розділ про стан активності.

Короткий зміст : Завдання переміщується на задній план, коли ви натискаєте Homeі сидите в пам’яті, нічого не роблячи, і зберігаючи його стан. Це означає, що (взагалі кажучи) ви можете переключитися назад на завдання, і воно підбере там, де воно припинилося. Однак система Android може - і буде - вбивати фонові завдання, якщо їй потрібно відновити пам'ять. Коли і якщо це трапляється, повністю залежить від системи, і, ймовірно, саме тому ви бачите непослідовну поведінку під час відновлення.

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

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


Таким чином, вони вбиваються на основі завдання, а не на основі діяльності / процесу. Останнє дозволило б вбити часткове завдання, що, мабуть, небажано.
jiggunjer

4

Натискання клавіші « Головна» дозволяє користувачеві запустити нове завдання, показавши пускову установку. Усі активні завдання (і, отже, діяльність, включаючи приклад "управління повітрям"), називатимуть їх onPause()метод.

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


Я думаю, що під "вбитим" ти маєш на увазі зупинену, а не знищену. Я вірю в нормальну термінологію Linux, коли ви вбиваєте процес (наприклад, активність), вам destroy()відповідні компоненти програми.
jiggunjer

Ні, я маю на увазі знищений.
Потік

При натисканні клавіші додому onStopвикликається метод. Вбитий процес не означає, що діяльність отримує onDestroyedназву свого методу, хоча він дійсно схожий. "Вбивство" процесу активності означає, що VM видалено з оперативної пам'яті. Мені це здається (Android, що вбиває це), ймовірно, вплине на роботу користувачів.
jiggunjer

4

Моя репутація все ще занадто низька на цьому сайті, щоб проголосувати, тому я відповідаю наголосити на відповіді Flow. Я продовжую стикатися з цією проблемою в одному зі своїх додатків. У мене є різні елементи спінінгу, і ви повинні явно зберегти їх стан у onPause (), а потім відновити стани в onResume () - Android автоматично не запам’ятовує їхні стани.

Ще одне ускладнення полягає в тому, що іноді Android викликає функцію програми onCreate () програми, коли ви лише очікуєте, що він зателефонує onResume ().

Тож ваша проблема з Air Control (або будь-яким іншим додатком) є специфічною для цього додатка, і вам слід повідомити про поведінку розробника для виправлення. Більшість програм мають контактну електронну пошту на ринку.

До речі, якщо ви хочете зрозуміти життєвий цикл програми, я рекомендую розділ 2 привіт Ед Бернетта, Android, особливо малюнок 2.3.


3

Домашня кнопка, натиснута в додатку:

Більшість додатків збережуть свій стан (будь-який біт даних, який би знадобився для збереження послідовності при поновленні), і пристрій переключиться на додаток запуску.

Домашня кнопка натискається, коли на головних екранах:

Це можна настроїти багатьма сторонніми пусковими установками; проте багато з них за замовчуванням повертають вас на головний головний екран (це робить запуск за замовчуванням).

Що може турбувати вашого друга:

Перемикання програм може бути інтенсивним у пам'яті і призвести до збереження даних декількома записами на диску. Для цього використовується акумулятор; однак зазвичай це не є основною причиною розряду акумулятора на пристроях (операційні системи оптимізовані для цього).

Деякі програми продовжуватимуть працювати як фоновий додаток, тому натискання кнопки додому не знищить їх (наприклад, Google Play Музика все одно відтворюватиметься після натискання кнопки додому).

Ваш друг може бути стурбований тим, що натиснувши кнопку додому, ви не вийшли з програми, і тому вона все ще працює. Android за потреби вивантажить ці програми.

Ви та ваш друг повинні більше перейматися дисплеєм, який використовує найбільшу кількість енергії.

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