Блог Ходакова

#golang #macos #linux #overwatch и стопицот других тегов
Не закрывайте приложения в iOS

Концепт многозадачности в iOS несколько отличается от Android, и это периодически весьма сложно осознать. В блоге Daring Fireball была опубликована заметка о том, почему не стоит закрывать приложения в iOS. Мне самому до недавнего времени казалось pнормальным закрыть приложение на iPhone, когда я закончил с ним работу, однако — это неправильно с точки зрения энергосбережения. Под катом — мой перевод той заметки.

Самое большое заблуждение относительно iOS: «закрывать приложения, которые ты не используешь — хорошо». Считается, что приложения, оставленные в фоне, продолжают занимать место в оперативной памяти, отъедают циклы работы процессора, что выливается в ухудшение производительности и времени автономной работы устройства.

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

Крейг Фредериги ответил на e-mail одного из пользователей, интересующегося тем, закрывает ли он приложения, и даёт ли закрытие приложений прирост к автономности, кратким и простым ответом: «Нет, и нет».

В официальной документации Apple, посвящённой закрытию приложений, есть //совет// о том, когда стоит закрывать приложение, который даёт производитель:

Когда вы дважды нажимаете кнопку «Домой», вам показываются запущенные недавно приложения. Эти приложения не открыты, но они находятся в режиме ожидания, помогая вам перемещаться по ним и выполнять несколько действий одновременно. Вы должны закрыть приложение только в том случае, если оно не отвечает (зависло).

MacDailyNews цитировал письмо Стива Джобса, отправленное им в 2010-м году:

Просто используйте [мультизадачность iOS] так, как она была задумана, и вы будете довольны. Здесь нет никакой необходимости в закрытии приложений.

На случай, если вы не верите старшему вице-президенту Apple, отвечающему за софт, официальной документации Apple, или Стиву Джобсу, держите ещё различных статей на эту тему, доказывающих, как эта привычка на самом деле вредна для времени автономной работы iPhone.

Миф о закрытии приложений столь пагубен, что я (автор Daring Fireball — прим.) слышал множество историй от своих читателей о сотрудниках Apple Store, которые рекомендовали закрывать приложения пользователям. Эти «гении» — кто угодно, но не гении.

Мне кажется, что одним из лучших доказательств вредности закрытия приложений (в плане производительности) являются замеры производительности устройств на YouTube. Существует целый жанр видео на YouTube, посвящённый замеру производительности новых телефонов, заключающемуся в запуске на них серии приложений и «тяжёлых» для процессора задач циклически, с двойным проходом по кругу. В первом круге приложения запускаются из незапущенного положения, а во втором — вызываются из многозадачности. Заметьте — на обоих устройствах приложения не закрывают. iPhone легко выигрывает первый круг, но вот уж где действительно айфон «тащит», так это на втором круге. S8 приходится перезапускать многие (если не все) приложения, потому что Android закрыл их принудительно, дабы высвободить память, которую они использовали. На iPhone все (ну, или почти все) приложения «ожили» практически моментально. Пример такого видео, в котором сравнивают Samsung Galaxy S8 и iPhone 7 Plus.

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

Другой фактор, который подталкивает к решению «закрывать приложения это хорошо» — это некоторые приложения, которые нарушают концепт многозадачности iOS, находя возможности избежать «заморозки», и действительно продолжают работать в фоне. Самое позорное, что за таким поведением было замечено приложение Facebook, игравшее музыкальные треки, состоящие из тишины, в фоне, чтобы использовать API для аудиоплееров, позволяющее им играть музыку в фоне. Они сказали, что это «баг», и в данном случае закрытие приложения действительно поможет увеличить время автономной работы устройства (а ещё больше поможет удаление Facebook в принципе — прим.), и я не вижу причин доверять Facebook. Так что, если вы хотите закрыть приложение Facebook — пожалуйста. Но не позволяйте одному приложению испортить всю концепцию. В «Настройках» iOS в разделе «Аккумулятор» можно просмотреть, какие приложения продолжают работать в фоновом режиме — нажмите иконку часов под надписью «Использование аккумулятора», и не закрывайте приложения, которые не мошенничают с фоновым режимом.

Этот пагубный миф появился весьма давно, и вряд ли исчезнет. Я писал об этом в 2012-м:

Как и с любым вуду, здесь есть истово верующие. Я абсолютно уверен, что получу тонну писем от людей, искренне считающих, что если очищать список приложений на своём iPhone каждый час, или около того, телефон будет работать лучше. Ерунда.

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

И это я ещё не говорю о людях, которые выключают свои iPhone, когда кладут их обратно в кошелёк или карман!

← Как добавлять ESX-инструменты в Лоджик Про софт по подписке →