Почему Task Killer'ы зло
Система многозадачности Android сильно отличается от используемых в других операционных системах. Вместо того, чтобы предоставить пользователю возможность самому закрывать приложения, Android полагается на автоматический механизм (lowmemorykiller), который сам закрывает наименее используемые фоновые приложения когда памяти становится недостаточно.
Тем нее менее многим пользователям такой подход показался неэффективным и они начали использовать так называемые таск-киллеры, которые работают в фоне и время от времени завершают все фоновые задачи. Считается, что таск-киллеры поднимают производительность и ускоряют работу устройства, однако на самом деле их использование приводит к обратному результату.
Таск-киллерам (от английского “task killer” - “убийца задач”) приписывают три положительных влияния на систему:
- таск-киллер освобождает память, в результате чего снижается потребление энергии;
- запуск новых приложений происходит быстрее, так как системе не приходится предварительно заниматься освобождением памяти;
- экономия заряда батареи происходит также за счет того, что приложения не продолжают работать в фоне и не создают нагрузку на процессор.
На самом деле все эти утверждения ложны. Против первого говорит тот факт, что оперативная память типа DRAM для хранения данных потребляет настолько мало энергии, что ей вполне можно пренебречь. К тому же если память не будет занята приложениями ядро Linux все равно попытается ее заполнить полезной информацией. В основном это кеш файловой системы.
Второе утверждение ложно потому, что система освобождения памяти всегда оставляет достаточное количество свободной памяти для запуска новых приложений. Это значит, что даже при забитой памяти всегда останется место для нового приложения, а память будет освобождена не перед запуском этого приложения, а в момент наименьшей нагрузки на систему (бездействия). Конечно, есть множество игр, которые требуют очень много памяти для работы, поэтому системе так или иначе придется освобождать ее во время запуска игры, но это практически не влияет на скорость запуска, так как операция по освобождению очень простая и выполняется за дали секунды.
Третье утверждение не совсем ложно, оно скорее бессмысленно. Фоновые приложения действительно могут создавать нагрузку на систему, но только в том случае, если в них есть сервисный компонент, который постоянно находится в памяти и выполняет работу, например, по сбору почты, уведомлению о событиях или включению звука будильника. Убивать такие приложения очень плохая идея, что было многократно доказано пользователями, которые устанавливали таск-киллеры, а затем жаловались в форумах, что “плохой Android” не разбудил их утром.
По этой причине в Android 4.0 была встроена защита от таск-киллеров и теперь они просто технически не могут убить подобные сервисные процессы пока приложение само не позволит это сделать. С другой стороны есть действительно плохо написанные приложения, которые могут сожрать батарею своими фоновыми действиями. От таких приложений лучше либо вообще избавится, либо “усыпить” с помощью приложения Greenify (требует root), которая запретит ему любую фоновую активность.