Почему аккумулятор iPhone не должен закрывать приложения?


51

Я знаю, очевидно, что не стоит закрывать приложения на вашем iPhone, чтобы сэкономить на батарее. Я читал вопросы и ответы, такие как « Принудительное закрытие приложений» на устройствах iOS? но это все еще не совсем гель со мной. Иногда я нашел более 50 приложений , работающих, так не закрывать их не имеет смысла.

Может быть, я немного староват, и вы просто не можете научить старых собак новым трюкам, но может кто-нибудь здесь объяснить, ПОЧЕМУ лучше просто держать все эти приложения работающими? И когда я говорю «объяснить», я имею в виду непрофессионала, чтобы я мог понять.


31
Заблуждение является «бегущей» частью. Приложения в Switcher не обязательно работают, большинство из них на самом деле нет. Думайте об этом больше как о «недавно использовавшемся» списке, чем о мониторе процесса
nohillside

3
Как и Patrix, я хотел бы добавить, что iOS закрывает приложения самостоятельно, когда ей не хватает памяти, поэтому, несмотря на то, что 50 приложений «работают», если вы смотрите видео, есть огромная вероятность, что другие 49 действительно было прекращено через 2/3 минуты. Переключатель приложений показывает только недавний снимок экрана этих приложений на данный момент.
Кодированная Обезьяна

5
@CodedMonkey Я в основном согласен с вашим комментарием, однако я хотел бы уточнить, что остальные 49 не будут отменены, они будут приостановлены. Разница в том, что когда приложение закрывается, оно больше не находится в памяти, а приостановка означает, что оно не отображается на экране и не выполняет код. В этом состоянии он не использует процессор или батарею, но все еще находится в памяти. Тем не менее, из всего сказанного, основываясь на вашем примере, я могу предположить, что iOS может фактически завершить работу некоторых из 49 других приложений, но держать большинство из них в приостановленном состоянии.
Мономет

8
Вероятно, нам нужно обратиться к слону в комнате - что заставляет вас говорить «просто держите все эти приложения работающими» - и что конкретно означает «закрывать приложения» - iOS 11 запускает максимум три приложения, а некоторые приложения получают периодические фоновые активации (по замыслу ) если мы говорим об ОС в широком смысле / непрофессионала. Если это предназначено для передачи дебатов о том, следует ли удалять сохраненные эскизы изображений приложений из многозадачного пользовательского интерфейса - давайте просто проясним это в вопросе.
bmike

3
Я действительно ужасаюсь, когда у меня есть (прямо сейчас) 314 треков I safari и 57 «открытых» приложений.
Тим

Ответы:


64

Ты не одинок. Люди просто привыкли к своим привычкам настольных компьютеров, и понятно, что они переносят эти привычки на свои iPhone и iPad.

Однако, позвольте мне попытаться объяснить это, используя аналогию:

Представьте себе, что это жаркий день, и вы вне садоводства. Вы испытываете жажду, поэтому вы идете внутрь на кухню, берете большой стакан, кладете в него немного льда и наполняете его водой. Затем вы выпиваете половину и выливаете остаток в раковину, прежде чем выходить на улицу. Вскоре вы снова испытываете жажду, поэтому вы идете обратно на кухню, берете тот же стакан, кладете в него немного льда и наполняете его водой. Опять же, вы пьете только половину, а остальное выливаете в раковину!

Приведенный выше рабочий процесс просто не имеет смысла. Почему бы тебе не взять стакан с собой? И вы не только тратите впустую воду, опустошая ее, но вы тратите больше времени и энергии, чтобы получить эту воду снова.

Точно так же, когда вы выходите из приложения, вы фактически используете некоторый заряд батареи в процессе этого (например, очищаете его из ОЗУ и т. Д.), А затем снова, когда вам нужно запустить его снова и загрузить обратно в ОЗУ.

Поэтому в большинстве случаев лучше оставлять приложения открытыми. Несмотря на то, что они открыты, они на самом деле просто сидят в режиме приостановки, в котором вообще не используется заряд батареи. Да, приложение все еще загружено в ОЗУ и занимает место , но на самом деле оно ничего не делает - оно просто бездействует. И поскольку в этом состоянии он не использует заряд батареи, нет смысла выходить из него с точки зрения сохранения заряда батареи - особенно если это приложение, которое, как вы знаете, будет использовать снова и снова в течение дня.

Также на самом деле нет никакого смысла принудительно выходить из приложения, потому что сама iOS сделает это за вас, если / когда это потребуется , чтобы освободить ОЗУ. Таким образом, если у вас открыто 50 приложений и они остаются открытыми, то iOS не была вынуждена закрывать какие-либо из них, чтобы освободить память.

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

Поэтому не стесняйтесь выходить из своих приложений, когда это необходимо (например, потому что он заморожен и т. Д.), Но не делайте этого для экономии заряда батареи. Фактически, если вы это сделаете, вы достигнете противоположного и будете использовать больше энергии аккумулятора в течение дня!

Резюме

  • Вы должны выйти из приложений, только если они не работают должным образом (например, приложение зависло, оно не отображается должным образом и т. Д.).
  • Приложения, перечисленные в App Switcher, не обязательно работают - на самом деле большинство из них вообще не работают .
  • Большинство приложений в App Switcher будут находиться в подвешенном состоянии - это означает, что они не видны на экране, не выполняют код, не используют процессор или графический процессор, а также не используют батарею. Тем не менее, они все еще находятся в памяти, пока они не будут очищены (если необходимо) системой для освобождения памяти:

    Приостановлено - приложение работает в фоновом режиме, но не выполняет код. Система автоматически переводит приложения в это состояние и не уведомляет их перед этим. Пока приложение приостановлено, оно остается в памяти, но не выполняет никакого кода. При возникновении нехватки памяти система может удалить приостановленные приложения без предварительного уведомления, чтобы освободить место для приложения переднего плана.

    Источник : см. Таблицу 2-3 в первой справочной ссылке в конце этого ответа.

  • Единственные приложения, которые действительно работают на вашем iPhone в любой момент времени, - это активное приложение (то есть, видимое на экране) и любые другие, работающие в фоновом режиме . ( Примечание: есть некоторые временные исключения из этого в случае приложений, которым все еще нужно время для завершения выполнения кода, который они уже запустили, когда они были активны - обычно это всего за несколько секунд, но теоретически может быть увеличено до минуты.) ,

  • Что касается приложений, работающих в фоновом режиме, вы можете контролировать, каким приложениям разрешено делать это (если они открыты), перейдя в «Настройки»> «Основные»> «Фоновое обновление приложения». ( Примечание: если вы видите приложение, указанное здесь, не значит, что оно будет работать в фоновом режиме, но отключение его здесь означает, что оно определенно не будет!)
  • Если ваш iPhone заблокирован, то приложение, которое было активно (то есть было видно на экране), когда вы заблокировали устройство, теперь неактивно . Однако, если вы только что заблокировали свой iPhone, и он все еще завершает выполнение кода или он работает в фоновом режиме (например, воспроизведение музыки и т. Д.), То он не использует процессор, графический процессор или батарею.

Рекомендации

  1. Для получения дополнительной информации о различных состояниях, в которых может находиться приложение, обратитесь к Руководству по программированию приложений Apple для iOS: Состояния выполнения для приложений .
  2. Для получения дополнительной информации о приложениях, работающих в фоновом режиме, обратитесь к Руководству по программированию приложений Apple для iOS: Фоновое выполнение .

9
Так что, если у вас открыто 50 приложений, и они остаются открытыми, то iOS не была вынуждена закрывать какие-либо из них, чтобы освободить память. Чтобы было ясно, вы не можете определить, есть ли приложения в приложении. Переключатель действительно открыт (т. е. находится в памяти) или нет.
MJeffryes

24
То, что разряжает батарею, снова запускает приложение . Приостановка приложения стоит дешево. Возобновление приостановленного приложения - это дешево. Но для полной загрузки приложения с нуля требуется много ресурсов (даже если некоторые из них все еще могут быть кэшированы): ОС должна загрузить приложение и все его зависимые инфраструктуры, весь код запуска приложения должен быть запущен снова и т. Д. .
DarkDust

5
Я всегда думал, что коммутатор перечисляет все приложения, когда-либо открытые на телефоне, до некоторого максимального предела в порядке их последнего использования, независимо от того, были они в памяти или нет. Если я прокручиваю достаточно далеко назад, переключение на приложение вызовет довольно долгую паузу, поскольку (я предполагаю) приложение загружается с диска. Есть ли документация, подтверждающая ваше мнение о его поведении?
MJeffryes

7
Это полезный ответ, но ни в коем случае iOS не сможет приостановить работу 50 приложений, если только у каждого из них нет действительно микроскопической памяти. Я переключаюсь между большими приложениями весь день (Safari, Twitter, Facebook, Reddit, YouTube и т. Д.), И часто получаю «полную перезагрузку», переключаясь на приложение, содержащее только 2 или 3 карты в списке последних использовавшихся.
BradC

3
@Monomeeth Множество приложений, которые эффективно завершены, т. Е. Для возобновления требуется полная перезагрузка, находятся в переключателе приложений. Я не верю, что iOS завершит работу полностью, если только не произойдет сбой - она ​​просто останется в переключателе приложений, не будет находиться в памяти и будет более или менее удобной для более удобного доступа.
Джо

22

Представленные ответы точны, я просто хочу уточнить с точки зрения разработчика iOS.

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

Это, как говорится, предпосылка:

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

Сказав все это, можно предположить, что большинство пользователей закрывают приложения в надежде увеличить время автономной работы, при этом создается впечатление, что, закрывая их, вы тратите меньше энергии на поддержание работы этих приложений.

Правда в том, что на iOS это почти никогда не происходит. Когда вы нажимаете home, приложение приостанавливается и больше не использует ресурсы, которые могут понадобиться другому приложению. Если новому приложению (или даже iOS) требуется эта память, оно само позаботится об этом, но только если это потребуется.

Вы закрываете приложения снова и снова, вынуждая iOS сделать эту потенциально дорогостоящую задачу по-настоящему выгрузкой приложения, сохранением его состояния, а что нет, с добавленной проблемой, что при повторном открытии приложения все эти вещи должны быть возвращены и, в зависимости от сложности приложения, многие вещи должны быть прочитаны из хранилища, в основную память телефона и так далее. Этой дополнительной работы можно было бы избежать, если бы вы просто позволили приложению оставаться в «приостановленном» состоянии.

Однако ...

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

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

Со временем большинство этих проблем исчезают, и приложение снова начинает работать; но если вам действительно нужно, чтобы приложение работало сейчас , тогда вы должны пойти дальше и заплатить цену за необходимость убить его и перезапустить с нуля. При этом вы использовали больше батареи, но вам это нужно.

И если это сбивает с толку, я могу привести аналогию с автомобилем, потому что это то, что мы склонны делать все время.

Автомобильная аналогия

Я знаю, что автомобильные технологии продвинулись вперед, и это уже не хороший пример, но играйте со мной здесь .

При запуске двигателя автомобиля использовалось больше топлива, чем просто на холостом ходу. Когда в автомобилях вместо инжекторов были карбюраторы, это было еще хуже; Вот почему выключение вашего двигателя, когда вы останавливаетесь на красный свет, теоретически может использовать больше топлива, чем просто холостой ход на минуту. Более новые автомобили имеют гораздо более эффективный механизм и могут останавливать двигатель, но остаются в полузапущенном состоянии (давайте не будем слишком вдаваться в автомобили здесь).

Вы закрываете приложения, это эквивалент человека, выключающего машину на каждом стоп-сигнале. Вместо того, чтобы просто дать ему простаивать, пока он вам снова не понадобится, обычно через несколько секунд.

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

Вы в основном выключаете свой движок каждый раз, когда убиваете приложение, и вы не позволяете iOS «умному» механизму холостого хода вашего движка позаботиться об этом, поэтому, когда индикатор становится зеленым, вы можете просто нажать на акселератор и двигатель работает быстрее, чем если бы он был остановлен на 100%. Запуск двигателя из остановленного состояния также потребляет больше энергии, чем просто топливо, вам нужно повернуть стартер, чтобы запустить двигатель, впрыскать топливо и создать искры, так что… это много работы за кулисами. Приложения похожи на движки. :)


1
Хаха, мне нравится аналогия (и твой ответ). :)
Monomeeth

Вопрос по поводу вашего комментария: неправильно работающие приложения: «[...] если вам действительно нужно, чтобы приложение работало сейчас, тогда вы должны пойти дальше и заплатить цену необходимости убить его и перезапустить с нуля. Вы использовали больше батареи делая это [...] "Вы верите, что это повсеместно более расточительно? Хотя в противном случае я не закрываю приложения, я часто предполагаю, что зависшее или иным образом проблемное приложение, вероятно, потребляет много ресурсов из-за неоднократных попыток и неуспешного выполнения того, что оно хочет. Я вижу, что это может быть менее интенсивно, чем начинать с нуля, вы верите, что это вообще так?
brhfl

1
@brhfl Трудно сказать, каждое приложение - это другой мир. Есть некоторые явные признаки того, что что-то не так. Если ваш телефон сильно нагревается в течение короткого периода времени, когда вы просто пытаетесь использовать приложение, это может означать, что используется процессор, или если телефон чувствует себя вяло (например, анимация пропускает кадры). Это хорошие признаки того, что что-то использует больше ресурсов, чем должно, и в этих случаях убить подозрительное приложение - это путь. В общем, если приложение приостановлено (в фоновом режиме), даже если оно не работает отлично, у него не будет другого выбора, кроме как вести себя; или рискует быть убитым iOS.
Мартин Маркончини,

1
  1. Если принудительно завершить работу приложения, а затем, когда вам потребуется повторно открыть его позднее, накладные расходы, связанные с запуском нового экземпляра приложения, потребляют больше ресурсов процессора и энергии, чем просто переключение с одного приложения на другое.
  2. Когда приложение просто находится в памяти, если оно на самом деле не создано для работы в фоновом режиме, оно обычно приостанавливается или отключается и не использует цикл ЦП (обычно). Если это довольно простое приложение, оно будет просто сидеть, используя память. В этом случае состояние приложения сохраняется где-то еще (в памяти устройства в случае Android), чтобы состояние приложения можно было восстановить позже. Чтобы дать вам представление, довольно длинное неотправленное сообщение, которое я написал в приложении Viber на своем телефоне, пережило отключение телефона из-за разряда батареи. После перезагрузки телефона, затем Viber, я обнаружил сообщение, ожидающее, пока я его отправлю. Halleluja.
  3. В зависимости от вашего чипа памяти, содержит ли он нули или единицы, не будет иметь существенного различия в потреблении энергии. Таким образом, хранение вещей в памяти не будет существенно экономить заряд батареи.
  4. Когда приложение находится в очень глубоком сне (ребята, пожалуйста, подтвердите это), в переключателе приложений будет видна только ссылка на него в виде снимка последнего экрана, который был виден из него перед тем, как перейти под него. Я говорю это потому, что однажды я решил закрыть все приложения на своем iPad, и я был удивлен количеством приложений, которые мне пришлось закрыть. Было более 60 приложений. Они не могут все храниться в памяти iPad. Я видел там несколько приложений, которые использовались несколько месяцев назад.

По аналогии ... с вашим автомобилем, если вам нужно сделать слишком много остановок в течение дня и продолжать останавливать и запускать двигатель, придет время, когда батарея будет полностью разряжена. Это может произойти, если время зарядки, когда вы едете между остановками, недостаточно велико для восстановления огромного количества энергии, которая высасывается из батареи при каждом запуске двигателя. Кроме того, это плохо для стартера и общего потребления газа. Вот почему многие водители грузовиков будут держать двигатель на холостом ходу во время коротких остановок.

Эта аналогия ИМО похожа на миф об экономии памяти.


-1

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

Очевидно, что чем больше приложений вы откроете, тем больше оперативной памяти будет привыкать. Как правило, каждое приложение в памяти разделяется на память, которую фактически использует само приложение, память, которую приложение хочет иметь под рукой, и память, которую операционная система фактически позволяла приложению использовать, что дает вам окончательный объем памяти приложения разрешено использовать. Причина, по которой приложение сохраняет отдельную часть этой памяти в качестве памяти, которую оно хочет использовать, заключается в том, что приложению может потребоваться увеличить объем кучи, но оно не обязательно хочет делать это сразу, потому что сборщикам мусора вредно имеют большие кучи (большие кучи = более длинные сборки мусора), поэтому приложение выделит часть памяти, которая в данный момент не используется, но может использоваться приложением исключительно в случае необходимости.

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

В этом смысле каждое приложение, которое открывается и приостанавливается, усложняет этот процесс, делая его более ресурсоемким и, в конечном счете, требует больше энергии батареи для открытия будущих приложений, чем экономия батареи, если не закрывать другие приложения.

Теперь учтите, что все это не учитывает, что, если вы действительно не убьете приложение, могут быть запущены фоновые службы, которые потребляют вычислительную мощность, например, уведомления, настроенные на уведомление вас по таймеру, и т. Д. С другой стороны, некоторые приложения не используют настоящую фоновую службу и фактически используют push-уведомления от таких служб, как firebase, которые не требуют, чтобы приложение было открыто в любой момент.

Еще один момент, который нужно учитывать: чем больше приложений вы постоянно открываете, тем больше фрагментируется память, пока операционная система не проработает и не очистит память, чтобы сделать ее более чистой и более эффективной, что само по себе также снижает вычислительную мощность, и Чем больше памяти занято приложениями, тем интенсивнее будет этот процесс для вашего устройства.

Все это говорит о том, что оставлять открытыми приложения в основном более эффективно, если не открывать слишком много приложений, однако я не уверен, сколько приложений нужно открыть, чтобы достичь этого порога, если число существует.

Источники:

Сборщик мусора SGen для Mono: http://www.mono-project.com/docs/advanced/garbage-collector/sgen/

Обзор профилировщика памяти для приложений iOS и Android Xamarin, в котором показано, как приложение управляет памятью (рабочий набор, личные байты, выделенная память и т. Д.) Https://blog.xamarin.com/say-hello-to -The-Xamarin-профилировщик /


1
Я не уверен, что это правильно - вы разработчик iOS? Я считаю, что iOS может по своему усмотрению убивать приостановленные приложения по мере необходимости, чтобы освободить память, но я сильно сомневаюсь, что это может частично уменьшить объем памяти приостановленного приложения. По крайней мере, как пользователь, кажется, что все или ничего.
BradC

2
Это все верно для «полной» ОС, выполняющей одновременную многозадачность полностью запущенных приложений. Это не относится к iOS (за исключением новых конфигураций с разделенным экраном). Я не говорю , что я положительный вы не правы, я просто говорю , что ваши инстинкты от друга ОС не могут применяться здесь.
BradC

1
И ИМХО вы путаете переключатель приложений со списком «открытых» / «в памяти» приложений. Это явно не тот случай, поэтому объем памяти вполне может быть одинаковым для iPhone с 5 или 20 приложениями в коммутаторе
nohillside

2
Управление памятью в инфраструктуре Mono / Xamarin не отражает работу собственных приложений / сервисов на платформе iOS. iOS и среда выполнения Objective-C / Swift не реализуют сборку мусора.
Майк Мерсоцк

2
@TrevorHart использует автоматический подсчет ссылок developer.apple.com/library/content/documentation/Swift/…
Матеуш Шлосек

-2

Чистая версия: это лучше, потому что ОС была разработана, чтобы сделать ее лучше до того, что пользователь захочет держать приложения (или в «приостановленном» состоянии), чтобы собрать больше информации о ваших действиях [*] позже если нужно.

Более длинная версия: приложения, которые «приостановлены», будут сохранять свое состояние в памяти, поэтому, как только вы захотите запустить их резервное копирование, процесс загрузки всего назад потребует меньше времени для процессора и почти не использует блок хранения ... С это то, что вы не можете знать, делают ли ваши приложения какие-то другие вещи в фоновом режиме, которые во многих случаях они сидят там, собирая данные о вас.


[*] Чтобы подробнее узнать о сборе данных с вашей стороны ... приложения, которые хранятся в памяти, могут быть либо «приостановлены», либо активны в фоновом режиме. Вы, как владелец устройства, не можете знать (если вы не обладаете знаниями и некоторыми другими приложениями для активного сканирования использования процессора), что на самом деле делает указанное приложение. С точки зрения безопасности я бы посоветовал закрыть любое приложение, которое вы не собираетесь использовать, в течение следующих 10 минут.

PS Эта практика также делается на устройствах Android, кстати ...


6
-1 Этот ответ был бы лучше, если бы в нем не было этого подтекста «ваш телефон предназначен для слежки за вами».
Nzall

4
«Ваш телефон предназначен для слежки за вами» на самом деле не относится к устройствам Apple - они не зарабатывают деньги на личных данных.
wizzwizz4

1
@ wizzwizz4 Говорит кто?
лет»

1
@yo 'Говорит, что я не могу найти доказательств того, что они это делают. Примите добросовестность и все такое.
wizzwizz4
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.