Телефон без тормозов: как значительно ускорить работу смартфона
Наверное, каждому знакома ситуация, когда спустя недолгое время после покупки смартфон начинает работать заметно медленнее. Чаще всего от этого страдают наши родители и дети, которым мы по “наследству” передаем свои старые устройства. Сегодня мы рассмотрим несколько наиболее эффективных решений данной проблемы: от самых простых до в меру продвинутых действий.
И хотя все “иллюстрации” будут приведены для Android, но в большинстве своем все они актуальны и для других мобильных операционных систем.
Освобождаем место для системы
Для начала обратите внимание на то, сколько у вашего телефона осталось свободной памяти. Это можно сделать, зайдя в «Настройки» и там перейдя в «Хранилище». Для корректной работы системы необходимо иметь небольшой запас дискового хранилища. Если же места нет, то система пытается его выделить, освобождая свои резервы. А на это уходит то самое дополнительное время, которое мы с вами и наблюдаем, как «тормоза». Я рекомендую следить, чтобы было свободно не менее 5 Гб памяти. Чем больше, тем лучше.
Здесь мы встречаемся с первой важной проблемой, где же это место найти. Ведь все в нашем телефоне нам нужно.
Помогая ускорить работу устройств своим родителям и знакомым, я заметил много абсолютно одинаковых фотографий, сделанных «на всякий случай». Иногда бывают видеоролики, которые нужны были в моменте, а теперь просто лежат пустым грузом. Благодаря таким файлам можно высвободить иногда даже очень внушительное по объему пространство.
Ну и не забываем о возможности перекинуть данные в облако или на внешний хранитель (карту памяти, флешку или жесткий диск).
После этих действий, зачастую сразу видно, что система стала меньше «задумываться» при запуске приложений и переключении между ними.
Следующим шагом имеет смысл удалить те приложения, которыми вы не пользовались как минимум 3 недели. Память под приложения в системе имеет строго ограниченный объем, который не зависит от оставшегося места на диске. То есть бывает такое, что памяти вроде еще много, а в вверху горит значок о том, что все место кончилось. В этом случае лучше какие-нибудь программы удалить.
Здесь будьте внимательны! Удалять нужно само приложение, а не иконку на заглавном экране (проверить это можно через меню «Настройки» — «Приложения»).
Бывает и такое, что некоторые программы удалить нельзя в принципе. Тогда постарайтесь их хотя бы “отключить”. Эту функцию они сами предлагают вместо удаления.
Режим энергосбережения
Обратите особое внимание и на то, чтобы режим энергосбережения был отключен либо установлен как «оптимальный». Это также может дать заметный прирост в скорости. В попытках продлить работку аккумулятора, система может искусственно занижать частоту работы процессора. В нашем случае — это абсолютно лишнее.
Виджеты
Значительную нагрузку на систему оказывают также установленные на заглавном экране виджеты (такие как погода, курс доллара, новости и всякое другое). С ними, конечно, красиво и очень наглядно, но за это приходится платить откликом операционной системы. Например курсы валют мы смотрим не чаще раза в день, а новости вообще можно вызвать на экран в тот момент, когда у нас на них есть время.
Обычно я рекомендую отключить все, что вы используете менее раза в день. А потом, при необходимости, можно вернуть, если что-то вдруг понадобилось.
Очищаем кэш браузера и системы
Для продвинутых пользователей я лично рекомендую очистить кэш браузера и системы. Кэш это информация, которая загружается на ваш смартфон, например, при открытии любого сайта. По ходу использования такая информация копится и может достигать нескольких гигабайт. При этом никакой полезной работы вся эта куча не делает. По факту — это просто мусор, который надо время от времени вычищать.
Для начала выполним очистку в браузере. Для этого в настройках перейдем – «История» — «Очистить историю» и там нажать “Удалить данные”. За непосредственно кэш отвечает третья галочка сверху.
У приложений тоже скапливается подобный мусор, но его очистить немного сложнее. Например, в телефонах Xiaomi нужно зайти в раздел «Хранилище» — «Данные кэша» и согласится на его очистку. У других производителей для этих целей имеются специальные, вшитые в систему программы. У Самсунг, например, это «Обслуживание устройства», а у менее известных брендов «Менеджер хранилища».
Также эту функцию можно осуществить из системного меню, зажав при старте аппарата громкость вверх и кнопку включения. Там нужно войти в меню «Recovery» и выполнить функцию «Wipe Cache» и выбрать «Yes». Больше там ничего там не трогайте!
Еще один способ очистки
Эти же действия можно осуществить и установив специальные приложения из Play Market, например, «One Booster», «Booster Master» и «Ant Booster». Подобных приложений целая куча.
Однако, через системные функции будет намного надежнее. После оптимизации обязательно удалите все эти “бустеры”, так как ресурсы они жрут будь здоров. То есть, установили — почистили- удалили.
Промежуточные итоги
Так мы очистили место в общей памяти, удалили ненужные приложения и виджеты и почистили кэш. Этих действий уже достаточно, чтобы на собственном опыте ощутить значительный прирост скорости работы смартфона.
Данная процедура лично у меня занимает от 3 до 5 минут, после чего даже старенькие телефоны родителей начинают “бегать” заметно шустрее.
Далее рекомендуется выключить и включить телефон снова. Обратите внимание! Не перезагрузить, а именно выключить, а затем включить. Это очень разные процессы и только полное отключение позволяет очистить служебные области памяти.
Визуальное обнаружение «тяжелых» программ
Не менее полезно будет войти в настройки аккумулятора обратить внимание на те приложения, которые больше других нагружают систему. У меня, как видите, есть возможность скрыть системные процессы, с которыми мы сделать ничего не можем, и показывать только установленные мною приложения. В числе таких гигантов я лично заметил, например, популярную сеть Тик Ток и Фейсбук.
Автозагрузка
Также у некоторых смартфонов есть встроенный редактор автозагрузки приложений. Ну или его можно также на один раз установить из магазина приложений. Для примера можно привести «Boot Apps» или «Auto Start Manager». Таких программ тоже очень много.
Устанавливаем приложение, даем ему разрешения и в нем уже отключаем вообще все. Это позволит нам при старте системы сохранить максимальное число оперативной памяти и загружать туда только то, что действительно необходимо. Было такое, что в автозагрузку себя прописывали даже разные игры, установленные «от нечего делать». Подобный расход полезных мощностей должен быть немедленно пресечен.
Системное ограничение числа фоновых процессов
Системное ограничение числа фоновых процессов я лично трогать не рекомендую, так как всякие социальные сети уже давно стали актуальной нормой общения, и постоянная выгрузка их из памяти только добавит только лишних проблем.
Главное придерживаться разумного их количества. Восемь-десять социальных сетей в активном режиме даже современный флагман могут неслабо так нагрузить, что уж говорить о аппаратах пятилетней давности.
Однако у тех же смартфонов Xiaomi я нашел интересную функцию, позволяющую выгружать некоторые приложения из памяти. Это полезно, так как на социальные сети можно поставить запрет, а, например, на тайм киллер — нет.
Однако ставить для этих целей какие-нибудь внешние менеджеры я лично не рекомендую. Так что внимательно изучите настройки производительности своего устройства. Может там есть что-то еще удобнее.
Альтернативная память для системы
Еще один интересный прием пригодится, если вы купили актуальный, но достаточно бюджетный “китайский” телефон для своих родителей или ребенка. У меня вот как раз такой случай. Проблема тут заключается в том, что обычно в них экономят на всем, включая даже системную память. То есть она тут банально очень медленная. Но решение есть. Достаточно установить в такой смартфон любую современную карту памяти и назначить ее системной.
Сделать это очень просто, достаточно установить такую карточку в смартфон и включить его. Телефон сам спросит использовать данную карточку в виде системной памяти или просто как внешний накопитель. Выбирайте первый пункт и сами увидите насколько положительно это скажется на скорости работы.
Без подобного финта мой старый XGODY буквально ходил пешком, теперь же им вполне можно пользоваться.
Если ничего не помогло
Однако бывают ситуации, когда даже эти методы оказываются неэффективными. В этом случае поможет полный сброс устройства до заводских настроек. Обычно эта функция находится в «Настройки» — «Система» — «Сброс настроек». Предварительно обязательно сохраните все важные вам данные в облако, на флешку или в любое другое место, поскольку все это будет принудительно удалено. Сам я обычно делаю бэкап системы и переношу папку с ним на компьютер, чтобы после процесса очистки снова развернуть на систему. Но это лучше придержать на совсем уж крайний случай.
Послесловие
Уверен, при помощи приведенных простых, но безусловно важных шагов вы легко сможете ускорить не только свой смартфон, но и помочь менее опытным пользователям легко справится с подобными проблемами. Если же у вас есть собственные идеи относительно данной тематики, обязательно оставляйте их в комментариях.
Источник
Как работает Android, часть 1
В этой серии статей я расскажу о внутреннем устройстве Android — о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.
Немного фактов
Android — самая популярная операционная система и платформа для приложений, насчитывающая больше двух миллиардов активных пользователей. На ней работают совершенно разные устройства, от «интернета вещей» и умных часов до телевизоров, ноутбуков и автомобилей, но чаще всего Android используют на смартфонах и планшетах.
Android — свободный и открытый проект. Большинство исходного кода (который можно найти на https://source.android.com) распространяется под свободной лицензией Apache 2.0.
Компания Android Inc. была основана в 2003 году и в 2005 году куплена Google. Публичная бета Android вышла в 2007 году, а первая стабильная версия — в 2008, с тех пор мажорные релизы выходят примерно раз в год. Последняя на момент написания стабильная версия Android — 7.1.2 Nougat.
Android is Linux
По поводу такой формулировки было много споров, так что сразу поясню, что именно я имею в виду под этой фразой: Android основан на ядре Linux, но значительно отличается от большинства других Linux-систем.
Среди исходной команды разработчиков Android был Robert Love, один из самых известных разработчиков ядра Linux, да и сейчас компания Google остаётся одним из самых активных контрибьюторов в ядро, поэтому неудивительно, что Android построен на основе Linux.
Как и в других Linux-системах, ядро Linux обеспечивает такие низкоуровневые вещи, как управление памятью, защиту данных, поддержку мультипроцессности и многопоточности. Но — за несколькими исключениями — вы не найдёте в Android других привычных компонентов GNU/Linux-систем: здесь нет ничего от проекта GNU, не используется X.Org, ни даже systemd. Все эти компоненты заменены аналогами, более приспособленными для использования в условиях ограниченной памяти, низкой скорости процессора и минимального потребления энергии — таким образом, Android больше похож на встраиваемую (embedded) Linux-систему, чем на GNU/Linux.
Другая причина того, что в Android не используется софт от GNU — известная политика «no GPL in userspace»:
We are sometimes asked why Apache Software License 2.0 is the preferred license for Android. For userspace (that is, non-kernel) software, we do in fact prefer ASL 2.0 (and similar licenses like BSD, MIT, etc.) over other licenses such as LGPL.
Android is about freedom and choice. The purpose of Android is promote openness in the mobile world, and we don’t believe it’s possible to predict or dictate all the uses to which people will want to put our software. So, while we encourage everyone to make devices that are open and modifiable, we don’t believe it is our place to force them to do so. Using LGPL libraries would often force them to do just that.
Само ядро Linux в Android тоже немного модифицировано: было добавлено несколько небольших компонентов, в том числе ashmem (anonymous shared memory), Binder driver (часть большого и важного фреймворка Binder, о котором я расскажу ниже), wakelocks (управление спящим режимом) и low memory killer. Исходно они представляли собой патчи к ядру, но их код был довольно быстро добавлен назад в upstream-ядро. Тем не менее, вы не найдёте их в «обычном линуксе»: большинство других дистрибутивов отключают эти компоненты при сборке.
В качестве libc (стандартной библиотеки языка C) в Android используется не GNU C library (glibc), а собственная минималистичная реализация под названием bionic, оптимизированная для встраиваемых (embedded) систем — она значительно быстрее, меньше и менее требовательна к памяти, чем glibc, которая обросла множеством слоёв совместимости.
В Android есть оболочка командной строки (shell) и множество стандартных для Unix-подобных систем команд/программ. Во встраиваемых системах для этого обычно используется пакет Busybox, реализующий функциональность многих команд в одном исполняемом файле; в Android используется его аналог под названием Toybox. Как и в «обычных» дистрибутивах Linux (и в отличие от встраиваемых систем), основным способом взаимодействия с системой является графический интерфейс, а не командная строка. Тем не менее, «добраться» до командной строки очень просто — достаточно запустить приложение-эмулятор терминала. По умолчанию он обычно не установлен, но его легко, например, скачать из Play Store (Terminal Emulator for Android, Material Terminal, Termux). Во многих «продвинутых» дистрибутивах Android — таких, как LineageOS (бывший CyanogenMod) — эмулятор терминала предустановлен.
Второй вариант — подключиться к Android-устройству с компьютера через Android Debug Bridge (adb). Это очень похоже на подключение через SSH:
Из других знакомых компонентов в Android используются библиотека FreeType (для отображения текста), графические API OpenGL ES, EGL и Vulkan, а также легковесная СУБД SQLite.
Кроме того, раньше для реализации WebView использовался браузерный движок WebKit, но начиная с версии 7.0 вместо этого используется установленное приложение Chrome (или другое; список приложений, которым разрешено выступать в качестве WebView provider, конфигурируется на этапе компиляции системы). Внутри себя Chrome тоже использует основанный на WebKit движок Blink, но в отличие от системной библиотеки, Chrome обновляется через Play Store — таким образом, все приложения, использующие WebView, автоматически получают последние улучшения и исправления уязвимостей.
It’s all about apps
Как легко заметить, использование Android принципиально отличается от использования «обычного Linux» — вам не нужно открывать и закрывать приложения, вы просто переключаетесь между ними, как будто все приложения запущены всегда. Действительно, одна из уникальных особенностей Android — в том, что приложения не контролируют напрямую процесс, в котором они запущены. Давайте поговорим об этом подробнее.
Основная единица в Unix-подобных системах — процесс. И низкоуровневые системные сервисы, и отдельные команды в shell’е, и графические приложения — это процессы. В большинстве случаев процесс представляет собой чёрный ящик для остальной системы — другие компоненты системы не знают и не заботятся о его состоянии. Процесс начинает выполняться с вызова функции main() (на самом деле _start ), и дальше реализует какую-то свою логику, взаимодействуя с остальной системой через системные вызовы и простейшее межпроцессное общение (IPC).
Поскольку Android тоже Unix-подобен, всё это верно и для него, но в то время как низкоуровневые части — на уровне Unix — оперируют понятием процесса, на более высоком уровне — уровне Android Framework — основной единицей является приложение. Приложение — не чёрный ящик: оно состоит из отдельных компонентов, хорошо известных остальной системе.
У приложений Android нет функции main() , нет одной точки входа. Вообще, Android максимально абстрагирует понятие приложение запущено как от пользователя, так и от разработчика. Конечно, процесс приложения нужно запускать и останавливать, но Android делает это автоматически (подробнее я расскажу об этом в следующих статьях). Разработчику предлагается реализовать несколько отдельных компонентов, каждый из которых обладает своим собственным жизненным циклом.
In Android, however, we explicitly decided we were not going to have a main() function, because we needed to give the platform more control over how an app runs. In particular, we wanted to build a system where the user never needed to think about starting and stopping apps, but rather the system took care of this for them… so the system had to have some more information about what is going on inside of each app, and be able to launch apps in various well-defined ways whenever it is needed even if it currently isn’t running.
Для реализации такой системы нужно, чтобы приложения имели возможность общатся друг с другом и с системными сервисами — другими словами, нужен очень продвинутый и быстрый механизм IPC.
Этот механизм — Binder.
Binder
Binder — это платформа для быстрого, удобного и объектно-ориентированного межпроцессного взаимодействия.
Разработка Binder началась в Be Inc. (для BeOS), затем он был портирован на Linux и открыт. Основной разработчик Binder, Dianne Hackborn, была и остаётся одним из основных разработчиков Android. За время разработки Android Binder был полностью переписан.
Binder работает не поверх System V IPC (которое даже не поддерживается в bionic), а использует свой небольшой модуль ядра, взаимодействие с которым из userspace происходит через системные вызовы (в основном ioctl ) на «виртуальном устройстве» /dev/binder . Со стороны userspace низкоуровневая работа с Binder, в том числе взаимодействие с /dev/binder и marshalling/unmarshalling данных, реализована в библиотеке libbinder.
Низкоуровневые части Binder оперируют в терминах объектов, которые могут пересылаться между процессами. При этом используется подсчёт ссылок (reference-counting) для автоматического освобождения неиспользуемых общих ресурсов и уведомление о завершении удалённого процесса (link-to-death) для освобождения ресурсов внутри процесса.
Высокоуровневые части Binder работают в терминах интерфейсов, сервисов и прокси-объектов. Описание интерфейса, предоставляемого программой другим программам, записывается на специальном языке AIDL (Android Interface Definition Language), внешне очень похожем на объявление интерфейсов в Java. По этому описанию автоматически генерируется настоящий Java-интерфейс, который потом может использоваться и клиентами, и самим сервисом. Кроме того, по .aidl -файлу автоматически генерируются два специальных класса: Proxy (для использования со стороны клиента) и Stub (со стороны сервиса), реализующие этот интерфейс.
Для Java-кода в процессе-клиенте прокси-объект выглядит как обычный Java-объект, который реализует наш интерфейс, и этот код может просто вызывать его методы. При этом сгенерированная реализация прокси-объекта автоматически сериализует переданные аргументы, общается с процессом-сервисом через libbinder, десериализует переданный назад результат вызова и возвращает его из Java-метода.
Stub работает наоборот: он принимает входящие вызовы через libbinder, десериализует аргументы, вызывает абстрактную реализацию метода, сериализует возвращаемое значение и передаёт его процессу-клиенту. Соответственно, для реализации сервиса программисту достаточно реализовать абстрактные методы в унаследованном от Stub классе.
Такая реализация Binder на уровне Java позволяет большинству кода использовать прокси-объект, вообще не задумываясь о том, что его функциональность реализована в другом процессе. Для обеспечения полной прозрачности Binder поддерживает вложенные и рекурсивные межпроцессные вызовы. Более того, использование Binder со стороны клиента выглядит совершенно одинаково, независимо от того, расположена ли реализация используемого сервиса в том же или в отдельном процессе.
Для того, чтобы разные процессы могли «найти» сервисы друг друга, в Android есть специальный сервис ServiceManager, который хранит, регистрирует и выдаёт токены всех остальных сервисов.
Binder широко используется в Android для реализации системных сервисов (например, пакетного менеджера и буфера обмена), но детали этого скрыты от разработчика приложений высокоуровневыми классами в Android Framework, такими как Activity, Intent и Context. Приложения могут также использовать Binder для предоставления друг другу собственных сервисов — например, приложение Google Play Services вообще не имеет собственного графического интерфейса для пользователя, но предоставляет разработчикам других приложений возможность пользоваться сервисами Google Play.
Подробнее про Binder можно узнать по этим ссылкам:
В следующей статье я расскажу о некоторых идеях, на которых построены высокоуровневые части Android, о нескольких его предшественниках и о базовых механизмах обеспечения безопасности.
Источник