Чому акумулятор iPhone краще не закривати програми?

Я знаю, що, мабуть, це не дуже гарна ідея закривати програми на своєму iPhone, щоб заощадити на батареї. Я прочитав запитання та відповіді, як Чи примусово закривають програми для пристроїв iOS? Досить гель зі мною. Іноді я знайшов понад 50 програм, тому не закриває їх не має сенсу.

Можливо, я трохи старий, і ви просто не можете навчити старих собак новим трюкам, але чи може хтось пояснити ЧОМУ краще просто тримати всі ці програми? І коли я кажу "пояснити", я маю на увазі терміни неспеціаліста, щоб я зрозумів.

48
@Monomeeth Не існує способу iOS зберегти 50 додатків призупинені одночасно, якщо кожен з них не має по-справжньому мікроскопічної пам'яті. На основі власних пристроїв і шаблону використання, я б оцінив, що тільки останні 3-10 програм зберігаються в призупиненому режимі. Якщо я витрачаю тривалий час на одне велике додаток (YouTube, Twitter, Safari та ін.), То навіть наступний останній додаток отримує повне перезавантаження, коли я повернуся назад. Очевидно, що більше оперативної пам'яті це буде трохи поліпшити, я використовую iPhone 6 з 1 Гб оперативної пам'яті.
додано Автор Erik van Brakel, джерело
Порозуміння - це «біг». Програми в Switcher не обов'язково працюють, більшість з них насправді не є. Подумайте про це більше як про «найновіший» список, ніж за монітор процесу
додано Автор Andrew Dunaway, джерело
@EdmundReed Збереження стану перезапуску можливе навіть без запуску програми. І не всі програми дійсно підтримують це.
додано Автор Andrew Dunaway, джерело
Ми, ймовірно, повинні звернутися до слона в кімнаті - що змушує вас говорити "просто тримати всі ці програми працює" - і що конкретно "закрити програми" - iOS 11 працює три програми максимум і деякі програми отримують періодичні фонові активації (за дизайном) ), якщо ми говоримо про операційну систему в загальних рисах. Якщо це призначено для того, щоб вивести дебати щодо того, чи потрібно видалити збережені ескізи зображень з багатозадачного інтерфейсу користувача - давайте просто зрозуміємо це питання.
додано Автор Oskar, джерело
@patrix спасибі за ясність, має сенс
додано Автор mvarshney, джерело
@patrix важко думати про нього як про "недавно використаний", коли він пам'ятає, де ви зупинилися, але не якщо ви "закрити" його.
додано Автор mvarshney, джерело
@CodedMonkey Я здебільшого згоден з вашим коментарем, однак одне пояснення, яке я б зробив, це те, що інші 49 не будуть припинені, вони будуть припинені. Відмінність полягає в тому, що, коли додаток припиняється, він більше не є резидентом в пам'яті, тоді як призупинення означає, що він не видно на екрані, а також не виконує код. У цьому стані він не використовує процесор або акумулятор, але все ще перебуває в пам'яті. Тим не менш, все, що сказав, використовуючи ваш приклад, я думаю, що iOS може фактично припинити деякі з інших 49 додатків, але зберегти більшість з них в призупиненому стані.
додано Автор Monomeeth, джерело
@BradC Досвід кожного користувача буде відрізнятися не тільки через кількість оперативної пам'яті, яку надає їх пристрій, але й через застосовані програми - обидві точки, які ви правильно визнаєте. :) У моєму особистому досвіді з iPhone 6s (2 Гб оперативної пам'яті) і програм, які я регулярно використовую, я часто не переживаю повну перезавантаження - це, звичайно, набагато менше, ніж раніше, Скажімо, iPhone 5 з 1 Гб оперативної пам'яті під управлінням iOS 8 - але, звичайно, не так добре, як нові моделі з 3 Гб оперативної пам'яті під управлінням iOS 11. Принести на наступний рік, і ми, швидше за все, буде 4 Гб оперативної пам'яті в нових iPhone.
додано Автор Monomeeth, джерело
Я дійсно жахаю своїх друзів, маючи (зараз) 314 сафарі та 57 програми «відкритими».
додано Автор Tim, джерело
Як і patrix, я хотів би додати, що iOS закриває програми самі по собі, коли їм не вистачає пам'яті, так що навіть якщо це виглядає як 50 додатків "запущені", якщо ви дивитеся відео, є величезні шанси, що інші 49 мають припинено через 2/3 хвилини. На цьому етапі перемикач програм показує лише нещодавнє захоплення екрану цих програм.
додано Автор Joseph P, джерело

5 Відповіді

Ти не один. Люди просто звикли до своїх навичок настільних комп'ютерів, і зрозуміло, що вони переносять ці звички до своїх iPhone та iPad.

Проте, дозвольте спробувати пояснити це за допомогою аналогії:

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

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

Аналогічно, коли ви виходите з програми, яку ви фактично використовуєте для цього, (наприклад, очистіть її з оперативної пам'яті тощо), а потім знову пізніше, коли потрібно знову запустити її та завантажити в ОЗП.

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

Також не існує жодних переваг, щоб змусити вийти з програми, оскільки сама iOS зробить це за вас, якщо/коли потрібно , щоб звільнити оперативну пам'ять. Отже, якщо у вас відкрито 50 додатків, і вони залишаються відкритими, iOS не було натиснуто, щоб закрити будь-яку з них, щоб звільнити пам'ять.

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

Отже, не соромтеся виходити зі своїх програм, коли вам потрібно (наприклад, через те, що вони заморожені тощо), але не робите це, щоб заощадити заряд акумулятора. Насправді, якщо ви це зробите, ви будете досягати протилежного і використовувати більше енергії акумулятора протягом дня!

Підсумок

  • You only need to quit apps if they're not working properly (e.g. an app has frozen, it isn't displaying properly, etc).
  • Apps listed in the App Switcher are not necessarily running - in fact most of them are not running at all.
  • Most apps in the App Switcher will be in a suspended state - this means they're not: visible on screen, executing code, using the CPU or GPU, or using the battery. However, they are still resident in memory until they are purged (if necessary) by the system to free up memory:

    Suspended - The app is in the background but is not executing code. The system moves apps to this state automatically and does not notify them before doing so. While suspended, an app remains in memory but does not execute any code. When a low-memory condition occurs, the system may purge suspended apps without notice to make more space for the foreground app.

    Source: See Table 2-3 within the first reference link at end of this answer.

  • The only apps actually running on your iPhone at any given point in time are the active app (i.e. the one visible on screen) and any others working in the background. (Note: There are some temporary exceptions to this in the case of apps that still need time to complete executing code they already started while they were active - typically this is only in the order of seconds but could theoretically extend to over a minute.).

  • In terms of apps running in the background, you can control which apps are permitted to do so (if they're open) by going to Settings > General > Background App Refresh. (Note: Just because you see an app listed here doesn't mean it will run in the background, but disabling it here means it definitely won't!)
  • If your iPhone is locked, then the app that was active (i.e. it was visible on screen) when you locked your device is now inactive. However, unless you've only just locked your iPhone and it's still finishing executing code or it's running in the background (e.g. playing music, etc) then it's not using the CPU, GPU or battery.

Посилання

  1. Для отримання додаткової інформації про різні стани, в яких може працювати програма, зверніться до Посібник із програмування програм для iOS: стан виконання для програм .
  2. Докладніше про програми, що працюють у фоновому режимі, див. Посібник із програмування програм для iOS: фонове виконання .
61
додано
Це корисна відповідь, але неможливо, щоб iOS тримав 50 додатків, якщо кожен з них не має по-справжньому мікроскопічної пам'яті. Я переключаюся між великими програмами цілий день (Safari, Twitter, Facebook, Reddit, YouTube тощо), і я часто отримую "повне перезавантаження", переходячи назад до програми лише 2 або 3 карти вниз найбільш недавно використовуваного списку.
додано Автор Erik van Brakel, джерело
Як зазначено в коментарях від Mjeffryes, BradC і Joe, це не тому, що програма присутня в перемикачі додатків, що вона фактично завантажена. iOS зберігає скріншот програми і може припинити її, якщо вона потребує пам'яті (що часто відбувається). При переході назад iOS покаже знімок екрана, а не заставку, і якщо додаток реалізує все, що потрібно (що рідко буває), він може перезавантажитися точно там, де він зупинився. Інакше ви отримаєте той самий результат, як якщо б ви щойно запустили програму.
додано Автор John Stimac, джерело
Що виснажує акумулятор, знову запускає програму . Призупинення програми є дешевим. Відновлення призупиненого додатка є дешевим. Але для того, щоб повністю завантажити програму з нуля, потрібно багато ресурсів (навіть якщо деякі з них все ще можуть бути кешовані): операційній системі потрібно завантажити програму та всі її залежні рамки, повний код запуску програми потрібно запустити знову, .
додано Автор Rizwan Sattar, джерело
Отже, якщо у вас 50 відкритих програм, і вони залишаються відкритими, то iOS не було висунуто настільки, наскільки потрібно закрити будь-який з них, щоб звільнити пам'ять розкажіть, чи дійсно програми в перемикачі програм дійсно відкриті (наприклад, резидентні в пам'яті) чи ні.
додано Автор MGOwen, джерело
Я завжди думав, що перемикач перераховує всі програми, що коли-небудь відкривалися на телефоні, до певної максимальної межі, в тому порядку, в якому вони були використані, незалежно від того, чи були вони в пам'яті чи ні. Якщо я перейду назад достатньо далеко, перехід на програму спровокує досить довгу паузу, оскільки (я припускаю) додаток завантажується з диска. Чи існує документація, яка підтверджує вашу думку про її поведінку?
додано Автор MGOwen, джерело
@ Monomeeth Звичайно, це був думок експерименту. Хоча я підозрюю на деяких пристроях iOS нижнього кінця, одна програма може споживати майже всю доступну пам'ять. Дякуємо за пояснення, я думаю, що це робить вашу відповідь точним.
додано Автор MGOwen, джерело
@Monomeeth Посилання хороші, але вони насправді не підтримують ваше твердження, що всі програми в комутаторі є резидентними в пам'яті. Єдиним посиланням на "багатозадачний інтерфейс" є те, що користувачі можуть явно закрити додаток від нього. Це не означає, що всі програми, які в ньому, відкриті. Уявіть, що ви використовуєте дуже інтенсивну пам'ять додаток. Ваша гіпотеза полягає в тому, що якщо б ви відкривали перемикач, він був би порожнім. На практиці це ніколи не відбувалося зі мною, і я думаю, що така поведінка буде настільки заплутаною для користувачів, що Apple ніколи б не реалізувала її таким чином.
додано Автор MGOwen, джерело
Це не має сенсу для мене. Я використовую чимало програм для створення аудіо/музики, і вони залишаються відкритими "у фоновому режимі", що вбиває акумулятор, навіть якщо вони нічого не роблять (і у фоновому режимі не ввімкнено в налаштуваннях). iPhone SE, 64 Гб. Крім того (і потенційно не актуальні більше) назад в iOS 6 днів на моєму 4s, Skype, будучи відкритим у фоновому режимі буде їсти всю батарею в годину або два. На щастя, з iOS 10 це вже не так.
додано Автор Jonathan van Clute, джерело
Я думаю, що є багато погано розроблених програм від великих корпорацій. Який сором.
додано Автор Jonathan van Clute, джерело
@MJeffryes Я оновив свою відповідь, щоб узагальнити його і включити посилання (з посиланнями) на статті Apple Developer. Сподіваюся, що це допомагає. Повідомте мене, якщо ви хочете побачити щось інше.
додано Автор Monomeeth, джерело
Якщо програма входить до переліку App Switcher, це означає дві речі: 1. воно було запущено в певний момент, і 2. воно не припинено. Обидва ці дії можуть виконуватися користувачем вручну або автоматично iOS. Отже, якщо додаток все ще перераховано у перемикачі, то так, він все ще залишається в пам'яті. Якщо це не вказано в списку, то ніщо не є резидентом в пам'яті. Однак тільки тому, що програма є резидентною пам'яттю, це не означає, що вона використовує будь-який заряд акумулятора. На практиці існує лише два стани, за яких програма використовує заряд акумулятора, коли він активний і коли він працює у фоновому режимі.
додано Автор Monomeeth, джерело
@ MJeffryes Коли я отримаю шанс, я буду оновлювати свою відповідь, щоб також надати більш стислий підсумок у маркованому вигляді і додати посилання на статті Apple Developer.
додано Автор Monomeeth, джерело
@MJeffryes Я роз'яснив мій третій пункт, оскільки я бачу, що це було трохи неоднозначно. Проте, з посиланням на приклад у вашому коментарі, це не є реальною можливістю, оскільки iOS не дозволяє виділити одній програмі більше, ніж певний відсоток оперативної пам'яті. Іншими словами, жодне додаток ніколи не може призвести до очищення всіх призупинених додатків! Будь-яке додаток, яке вимагає більше оперативної пам'яті для запуску, ніж система виділить, або завершиться аварійним завершенням, або, якщо він розроблений належним чином, збереже його дані у тимчасовому файлі та виконає будь-яку обробку на ньому (наприклад, використовуючи файли, зіставлені з пам'яттю).
додано Автор Monomeeth, джерело
@JonathanvanClute Тоді ці програми погано розроблені; з цієї причини програма, яка добре поводиться, не повинна робити непотрібну роботу у фоновому режимі.
додано Автор Daniel Holmes, джерело
@Monomeeth Багато програм, які ефективно припиняються, тобто вимагають повного перезавантаження для відновлення, знаходяться в перемикачі програм. iOS не буде повністю припинено, я не вірю, якщо не було аварії - це просто залишається в перемикачі програм, не є резидентом в пам'яті і просто більш-менш зручною для доступу.
додано Автор Jack Douglas, джерело
Любіть цю аналогію!
додано Автор Tom Wyllie, джерело
Дуже погана аналогія. Лід тане, коли ви його не пили, тому зрозуміло, чому ви потребуєте свіжого скла кожного разу. Вся справа в тому, що заморожене додаток не відчуває ніякого погіршення, і не перешкоджає іншим програмам, як скло води перешкоджає робочій станції.
додано Автор Tobias, джерело
Краща аналогія садівництва: ви заходите всередину, щоб отримати склянку води, але перш ніж це зробити, ви покладете всі інструменти, які ви використовували, назад в сарай. Потім, коли ви повернетеся, щоб продовжити роботу, ви повинні знову взяти всі інструменти.
додано Автор James Martin, джерело
Блискуче! Дякуємо за пояснення цього. Ця стара собака тепер має підстави вивчати нові трюки.
додано Автор Ashwin, джерело

Надані відповіді точні, я просто хочу роз'яснити з точки зору розробника iOS.

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

Якщо говорити, то це:

  • iOS більше знає про пам'ять, ніж ми. Вона знає, скільки вона має, і скільки вона потребує (до певної міри).
  • iOS має повний контроль над пам'яттю; воно має останнє слово про те, хто що використовує.
  • Якщо iOS потребує пам'яті, вона знайде її, і це зазвичай робиться при вбивстві інших процесів, які були неактивними протягом деякого часу (а за лаштунками багато правил, ми їх не знаємо, і ми не знаємо їх усіх не хвилюйтеся про них).
  • Все, що робить процесор (CPU), бере енергію. Абсолютно все. Не забувайте, що комп'ютери - це дуже маленькі електронні контейнери, які переміщують їх у дуже маленьких просторах.
  • Коли додаток убитий, існують деякі узгоджені протоколи (контракти), які визначають, що потрібно зробити. iOS застосовує та виконує ці протоколи. Але робота повинна бути зроблена, вона не є вільною і, звичайно, не завжди дешевою (це дійсно залежить від того, що додаток).

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

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

Ви закриваєте додатки знову і знову, змушуючи iOS зробити цю потенційно дорогу завданням дійсно розвантажувати програму, зберігаючи її стан, а що ні, з доданою проблемою, що під час повторного відкриття програми всі ці речі повинні бути повернуті і, в залежності від складності програми, багато речей потрібно прочитати з пам'яті, вгору в основну пам'ять телефону, і так далі. Всі ці додаткові роботи, можна було б уникнути, якщо ви просто дозволити додаток залишитися в своєму "призупинено" стан.

However

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

У мене було безліч екземплярів таких програм, як Lyft, United Airlines, навіть Twitter, які закінчуються в розбитому стані (або просто не працюють належним чином), або через те, що ви знаходитесь в поганій мережі відновлення з деяких поганих мереж за останні 3-4 версії) або мережа просто не відповідає належним чином.

З часом більшість цих проблем, як правило, зникає, і додаток починає працювати знову; але якщо вам дійсно потрібен додаток, щоб працювати зараз , вам доведеться заплатити за те, щоб його вбити і перезапустити з нуля. Ви використовували більше батареї, роблячи це, але, ей, вам це було потрібно.

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

Аналогія автомобіля

Я знаю, що технологія автомобіля просунулася, і це не є хорошим прикладом, але грати зі мною тут .

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

Ви закриваєте програми, є еквівалент особи повертаючий автомобіль у кожному світлі зупинки. На відміну від простого відпускання, поки ви не потребуєте його знову, звичайно через кілька секунд.

Аналогія не є досконалою, правда, бездіяльні автомобілі все ще використовують паливо, тоді як припинені програми не використовуються; однак, в очах телефону, вони не використовують що-небудь пов'язане з пам'яттю/акумулятором (якщо вони не мають фонової обробки будь-якого сортування, очевидно).

Ви в основному вимикаєте двигун кожен раз, коли ви вбиваєте додаток, і ви не дозволяєте iOS "розумний" механізм холостого ходу вашого двигуна піклуватися про нього, тому, коли світло стає зеленим, ви можете просто натиснути на акселератор і движок працює швидше , ніж якщо б він був зупинений на 100%. Початок двигуна з зупиненого стану, також використовує більше енергії, ніж просто паливо, вам потрібно перетворити стартер, щоб двигун міг бути розігнаний, паливо впорскується і іскри створені, так що… багато роботи за лаштунками. Програми схожі на двигуни. :)

19
додано
@brhfl Важко сказати, що кожен додаток - це інший світ. Є деякі чіткі ознаки того, що щось не так. Якщо телефон швидко нагрівається за короткий час, поки ви просто намагаєтеся використовувати програму, це може означати, що використовується процесор, якщо телефон відчуває себе млявим (наприклад, анімація пропускає рамки). Це хороші ознаки того, що щось використовує більше ресурсів, ніж потрібно, і в тих випадках, коли вбивство підозрюваного додатка, це шлях. Загалом, якщо додаток призупинено (фон), навіть якщо він не спрацював, він не матиме іншого вибору, окрім як вести себе; або ризик бути убитий iOS.
додано Автор UnkwnTech, джерело
Питання про ваш коментар re: неправильно використовуються програми: "[...] якщо вам дійсно потрібна програма, щоб працювати зараз, то вам доведеться платити за те, щоб вбити її і перезавантажити її з нуля. роблячи це [...] "Ви вважаєте, що це універсально більш марнотратно?" Хоча я не припиняю додатки в іншому випадку, я часто припускаю, що зависання або інше проблемне додаток, швидше за все, споживає багато ресурсів, неодноразово намагаючись і не вдаючись до того, що він хоче зробити. Я бачу, що це може бути менш інтенсивним, ніж початок від нуля, ви вважаєте, що це взагалі справа?
додано Автор infojunkie, джерело
Ха-ха, мені подобається аналогія (і ваша відповідь). :)
додано Автор Monomeeth, джерело

Clean cut version: It is better because the OS was designed to make it better to the point that the user would want to keep apps on (or in a "suspended" state) in order to gather more information on your actions[*] later if needed.

Longer version: Apps that are "suspended" will have their state saved in memory so once you want to start them back up the proces of loading everything back will require less time for the procesor and almost no use of the storage unit...With this you can't know if your apps are doing some other things in the background which in a lot of cases they sit there collecting data on you.


[*] Щоб детально описати збір даних у вашій частині ... програми, які зберігаються в пам'яті, можуть бути або "припинені", або активні у фоновому режимі. Ви, як власник пристрою, не можете знати (якщо ви не володієте знаннями та деякими іншими програмами, щоб активно сканувати використання процесора), що це дійсно робить додаток. З точки зору безпеки, я б радив закрити будь-яке додаток, яке ви не збираєтеся використовувати протягом наступних 10 хвилин.

P.S. Ця практика виконується на пристроях Android, а також ...

2
додано
@ wizzwizz4 Каже хто?
додано Автор abhishek abhi Abhi, джерело
-1 Ця відповідь була б краще, якби не було такого відтінку, що "ваш телефон розрахований на шпигування за вами".
додано Автор PeskyToaster, джерело
@yo 'Висловлює мою нездатність знайти докази того, що вони роблять. Прийміть добру віру і все таке.
додано Автор wizzwizz4, джерело
"Ваш телефон розрахований на шпигування за вами" насправді не стосується пристроїв Apple - вони не заробляють гроші на особистих даних.
додано Автор wizzwizz4, джерело

Просто кидаємо ту чи іншу думку заради обговорення. Ця концепція має певну ступінь істини до неї, але як тільки у вас відкрито певну кількість додатків, ви, швидше за все, почнете спостерігати зменшення прибутковості від призупинення роботи програм.

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

Скажіть, що операційна система дозволяє моєму додатку до 700mb, а додаток встановлює 300mb цієї пам'яті для себе, залишаючи 400mb там для мого додатка, щоб використовувати, якщо він хоче, але потім відкривається інша програма і потребує певної пам'яті; ОС дивиться на всі різні додатки, і вирішує, чи нічого не треба витягати з іншої програми і використовувати її для нової програми, в цьому випадку вона може вирішити взяти 150 Мб з моїх додатків дозволеної пам'яті і дати її новій програмі , що вимагає, щоб пам'ять обмінювалася навколо, щоб використовувати нову пам'ять програми (подумайте про це як про перерозподіл коштів у бізнесі), чим більше відкритих програм, тим більше роботи повинна зробити операційна система, щоб вирішити питання пам'ять програми, яку вона може витягти, щоб дати новій пам'яті програми.

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

Зверніть увагу на те, що ніщо з цього не враховує, що якщо ви дійсно не вб'єте додаток, можуть бути запущені фонові служби, які згортають обчислювальну потужність, наприклад сповіщення, встановлені для сповіщення про таймер і т.д. програми не використовують справжню фонову службу, а фактично використовують push-сповіщення з таких служб, як firebase, які не вимагають відкриття програми в будь-який момент.

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

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

Джерела:

SGen garbage collector for Mono: http://www.mono-project.com/docs/advanced/garbage-collector/sgen/

Overview of memory profiler for both iOS and Android Xamarin apps, which shows the way memory is managed by the app (working set, private bytes, memory allocated, etc.) https://blog.xamarin.com/say-hello-to-the-xamarin-profiler/

1
додано
Це все вірно для "повноцінних" ОС, які виконують одночасну багатозадачність повністю запущених програм. Це не стосується iOS (за винятком нових конфігурацій розділеного екрану). Я не кажу, що я позитивний , ви помиляєтеся, я просто кажу, що ваші інстинкти від інших ОС можуть не застосовуватися тут.
додано Автор Erik van Brakel, джерело
Я не впевнений, що це правильно - ви розробник iOS? Я вважаю, що iOS може, на власний розсуд, вбивати призупинені програми, необхідні для звільнення пам'яті, але я дуже сумніваюся, що частково може зменшити розмір пам'яті призупиненого додатка. Принаймні, як користувач, здається, що це все або нічого.
додано Автор Erik van Brakel, джерело
Цікаво, чи використання пам'яті в Mono і Xamarin є репрезентативним для більшості додатків iOS або якщо це особливі випадки, пов'язані з крос-платформним фокусом задіяних структур.
додано Автор Andrew Dunaway, джерело
І ІМХО ви плутаєте перемикач додатків зі списком «відкритих»/«в пам'яті» додатків. Це явно не так, тому розмір пам'яті може бути однаковим для iPhone з 5 або 20 додатками в комутаторі.
додано Автор Andrew Dunaway, джерело
Управління пам'яттю Mono/Xamarin Framework не є репрезентативним для того, як родові програми/служби працюють на платформі iOS. iOS та Objective-C/Swift не виконують збір сміття.
додано Автор XenoDwarf, джерело
@TrevorHart використовує автоматичний підрахунок посилань developer.apple.com/library/content/documentation/Swift/& hellip;
додано Автор Doug Brunner, джерело
Ви могли б мати рацію з точки зору чистої рідної системи iOS, але, як я сказав для Android, і для iOS-програм, написаних на Xamarin, які використовують час виконання Mono, це точно, як принаймні частина Mono програми працює, я бачив в профайлерах пам'яті додатків, і я перевірив його в документації зі збирання сміття SGen і в документації Android.
додано Автор user263866, джерело
Я додав деякі джерела, якщо ви хочете подивитися, і, можливо, ми можемо мати більш поінформовані дискусії з цього приводу, тому що якщо я помиляюся, я хотів би знати.
додано Автор user263866, джерело
Причина цього полягає в тому, що, якщо додаток потребує більше пам'яті, то воно є для прийняття, і ОС не повинна робити більше роботи, щоб забезпечити більше пам'яті для програми, це, як правило, дуже ефективний спосіб керування пам'яттю, тому я кажу, якщо iOS не зробить цього, здається, це нерозумно не робити, і якщо ви будуєте програму з Xamarin (те, що я роблю), mono виконання запускається поверх виконання iOS, а SGen збирач сміття, безумовно, управляє пам'яттю, як я його описую, тому він повинен бути однаковим для iOS.
додано Автор user263866, джерело
Кожна окрема операційна система, яку я знаю, може частково зменшити пам'ять, тому я не впевнений, чому це буде інше в iOS, ключ до того, що я кажу, однак, це обсяг пам'яті, яку операційна система каже, що може використовувати програма що саме додаток використовує. У тих випадках, коли ОС вважає, що є багато пам'яті для обходу, вона часто дає величезну кількість пам'яті процесу, навіть якщо додаток запитує лише частку цього, тоді ОС витягне пам'ять з цієї зайвої пам'яті. якщо він вважає це необхідним.
додано Автор user263866, джерело
Це дуже можливо, але я був би здивований, якщо б iOS не дотримувалися основних схем управління пам'яттю будь-якої іншої платформи, включаючи інші мобільні та вбудовані системи, тим більше, що iOS підтримує цей тип керування пам'яттю за допомогою Mono-додатків, але знову я можу помилятися, Я хотів би побачити деякі документи, які пояснюють, як iOS робить речі для справжніх власних програм.
додано Автор user263866, джерело
@MikeMertsock бачу, я не розумію, що, як Swift робить управління пам'яттю, якщо це так?
додано Автор user263866, джерело
  1. Якщо ви примусово вимкнете програму повністю, тоді, коли потрібно знову відкрити її пізніше, накладні витрати, пов'язані з запуском нового екземпляра програми, більше CPU та енергоємніші, ніж просто перемикання з однієї програми на інше.
  2. Коли програма просто сидить у пам'яті, якщо вона фактично не побудована для запуску у фоновому режимі, вона, як правило, призупинена або убита і не споживає жодного циклу процесора (зазвичай). Якщо це досить просте додаток, то воно буде просто сидіти там, використовуючи пам'ять. У такому випадку стан програми зберігається в іншому місці (на пристрої для зберігання даних у випадку Android), щоб можна було відновити стан програми пізніше. Щоб дати вам уявлення, досить довге ненадіслане повідомлення, яке я написав у додатку Viber на моєму телефоні, пережило вимкнення телефону через вичерпання батареї. Після перезавантаження телефону, а потім Viber, я знайшов повідомлення, що чекає, коли я надішлю його. Алілуя.
  3. Залежно від вашого чіпа пам'яті, чи містить він нулі або одиниці, не буде суттєво розрізняти споживання енергії. Таким чином, збереження речі в пам'ять не значно допоможе вам заощадити акумулятор.
  4. Коли додаток перебуває у надзвичайно глибокому сну (хлопці, підтвердьте це), у перемикачі програм буде показано лише посилання на нього, як знімок останнього екрану, який було видно з нього перед тим, як перейти до розділу. Я кажу це тому, що один день, я вирішив закрити всі програми в моєму iPad, і я був здивований кількістю додатків, які я повинен був закрити. Це було більше 60 додатків. Їх не можна зберігати в пам'яті iPad. Я бачив там деякі програми, які використовувалися кілька місяців тому.

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

Ця аналогія є ІМО, подібною міфу збереження пам'яті.

0
додано