Как закрепить приложение в фоновом режиме андроид 11
Работа смартфона — весьма сложный процесс, который не прекращается ни на минуту даже ночью, когда телефон лежит у вас под подушкой. Большинство процессов в смартфоне продолжают свою работу незаметно для глаз пользователя и могут потреблять достаточно большое количество ресурсов.
Многие пользователи ошибочно считают, что оперативную память «съедают» те приложения, которые остаются свернутыми, и если их закрыть, можно таким образом освободить бОльшую часть памяти.
На самом деле это не так. Свернутые приложения, находящиеся в режиме ожидания — это лишь верхушка айсберга. По сути – это только кэшированные данные, которые позволяют вам вернуться в приложение без потери последних данных. Закрыв их, вы сможете лишь немного освободить оперативную память телефона. Основная же часть ресурсов приходится на процессы или службы приложений. Именно они потребляют оперативную память и расходуют заряд батареи даже тогда, когда приложение закрыто.
Не все из них одинаково полезны, но есть и те, которые могут отвечать за безопасность устройства и его стабильную работу. Тем не менее, если телефон стал слишком задумчивым и вы замечаете, что он потребляет заряд батареи, даже находясь в режиме ожидания, вам будет полезно узнать как ограничить работу фоновых процессов и тем самым освободить оперативную память устройства, а также повысить его быстродействие.
Как управлять фоновыми процессами
Получить расширенный контроль над фоновыми процессами можно с помощью специальных инструментов, встроенных в операционную систему. В смартфонах Android эта возможность реализована с помощью скрытого меню для разработчиков.
Как включить параметры разработчика
Для того, чтобы активировать режим разработчика, необходимо перейти в Настройки телефона, открыть пункт «Сведения о телефоне», затем «Сведения о ПО» и несколько раз подряд нажать на пункт «Номер Сборки» до появления системного уведомления о том, что режим разработчика активирован.
Затем нужно вернуться назад, в главные настройки. Если все было сделано правильно, вы увидите, что внизу появился новый пункт меню «Параметры разработчика».
Как управлять фоновыми процессами
Для того, чтобы управлять фоновыми процессами, в меню «Параметры разработчика» необходимо найти пункт «Приложения». Здесь находится несколько параметров, отвечающих за работу фоновых процессов. Например, параметр «Вытеснение фоновых Activity» позволяет принудительно останавливать действия приложений после их закрытия (не рекомендуем включать), а параметр ANR в фоновом режиме — отображать фоновые уведомление в случае, когда какой-то процесс не отвечает.
Больше всего нас здесь интересует параметр «Лимит фоновых процессов», который позволяет выбрать какое количество процессов будет использоваться вашим смартфоном в фоне. Данное ограничение затрагивает в основном сторонние приложения, установленные пользователем, поэтому можно не переживать за работающие системные службы.
По умолчанию здесь установлено значение «Стандартное ограничение».
Для слабых смартфонов с небольшим количеством оперативной памяти можно ограничиться значением «не более 1−2 процессов». Для устройств «пошустрее» можно установить лимит «не более 4 процессов».
Полное отключение фоновых процессов может повлиять на корректную работу некоторых приложений, поэтому мы не рекомендуем использовать данную функцию по максимуму, особенно если вы активно пользуетесь мессенджерами, почтой и другими приложениями, которые требуют проверки уведомлений.
Заключение
Теперь вы знаете, как, изменив лимит фоновых процессов, можно существенно снизить потребление оперативной памяти и повысить общее быстродействие смартфона. Но помните, что использовать меню разработчика стоит только в том случае, если у вас наблюдаются существенные проблемы в работе устройства и не пренебрегайте этим правилом без крайней необходимости, в противном случае есть риск навредить работе гаджета.
Некоторые приложения, например, «ВКонтакте», «Яндекс.Музыка» и т.п. для работы в фоновом режиме требуют приобретения подписки.
Выполните следующие рекомендации:
Отключите оптимизацию расхода для приложения
- Откройте меню «Настройки» > «Приложения».
- Нажмите на три точки, выбрите пункт «Особые права доступа».
Разрешите приложению работать в фоновом режиме
- Откройте меню «Настройки» > «Приложения».
- Выберите в списке нужное Вам приложение.
Проверьте, не находится ли приложение в спящем режиме
Если у Вас Android 11
- Откройте меню «Настройки» > «Обслуживание устройства».
- Выберите пункт «Батарея» > «Ограничения в фоновом режиме» > «Приложения в режиме сна».
- Если нужное Вам приложение есть в этом списке, нажмите три точки, далее «Удалить приложения».
- Удалите нужное Вам приложение из списка.
Если у Вас Android 10
- Откройте меню «Настройки» > «Обслуживание устройства».
- Выберите пункт «Батарея» > «Мониторинг энергопотребления» > «Приложения в спящем режиме».
- Если нужное Вам приложение есть в этом списке, нажмите на значок корзины в правом верхнем углу.
- Удалите нужное Вам приложение из списка.
Если у Вас более ранняя версия Android
- Откройте меню «Настройки» > «Обслуживание устройства».
- Выберите пункт «Батарея» > три точки > «Ограничения в фоновом режиме» > «Приложения в спящем режиме».
- Если нужное Вам приложение есть в этом списке, нажмите на значок корзины в правом верхнем углу.
- Удалите нужное Вам приложение из списка.
Проверьте, не используются ли сторонние приложения-оптимизаторы
Если у Вас установлены приложения-оптимизаторы, влияющие на работу других приложений – отключите их.Выполните сброс настроек смартфона
Сброс настроек приведет к удалению всех данных с Вашего устройства.
Мы настоятельно рекомендуем сделать резервную копию всех ваших важных данных до сброса.
Автозапуск приложений — это процесс, сопровождающийся самопроизвольной загрузкой какого-либо приложения, либо одной из его частей для выполнения задач в фоновом режиме. Фоновый режим же — это активная работа процесса в закрытом состоянии. То есть, даже если вы не используете программу, она работает. Большинство программ сейчас работает в Android по такому принципу.
Из статьи вы узнаете
Какие программы работают в фоновом режиме?
Всего есть два типа приложений, работающих в фоновом режиме, а именно:
- С автозапуском;
- С активной работой в фоне.
Приложения с автозапуском. Активируются вместе с системой и работают в фоновом режиме всегда. К таким программам можно отнести клиенты, мессенджеры, утилиты для отображения погоды, лаунчеры, виджеты и так далее. Они никогда не выключаются и остаются в фоновом режиме.
Приложения с активной работой в фоне. Это программы, которые находятся в данном режиме только при активной работе. Например, вы начали установку любимой игры из Google Play. Сервис будет загружать файл, даже если вы в этот момент занимаетесь другими процессами на телефоне. Как только игра будет уставлена, Play Market сам выгрузится из фонового режима и не будет там появляться, пока пользователь снова не попытается что-то скачать/переустановить/обновить. К таким приложениям относятся плееры, загрузчики, торренты, браузеры и так далее.
Какие последствия от приложений, постоянно работающих в фоновом режиме?
Чтобы вычислить норму для вашего аппарата, воспользуйтесь простой формулой: посмотрите сколько у вас приложений работает в фоновом режиме. Все эти утилиты показаны в настройках, в разделе «Память» и отображаются как работающие процессы. Если их много, но все они занимают где-то 10-40 MB, то большого вреда они не нанесут. Зачастую такие приложения висят в автозапуске для более быстрого старта, для поиска обновлений, отправки анонимной статистики, попытке получить новые уведомления и так далее.
Если в фоне висит приложение, которое очень часто используется, и оно занимает мизерное количество оперативной памяти – не трогайте его. Но если очень редко его запускаете, а оно все равно висит в активных задачах – смело отключайте.
Особое внимание обратите на программы, занимающие от 10% оперативной памяти. Их стоит по максимуму отключать. Но если среди них есть необходимые вам мессенджеры, сервисы Google и прочие важные процессы, то их лучше оставить. Аналогия проста: если часто пользуетесь утилитой или программой, то не стоит их отключать. Вполне нормально, когда в фоне работает около 10 приложений, из которых 5 вовсе не используется так часто.
Как отключить приложение из автозапуска?
Чисто технически отключить приложение из автозапуска нельзя. Но можно ограничить его работу в фоне. Для этого выполните действия, описанные ниже.
Инструкция для Android 8, 9, 10 и выше
Таким образом можно легко отключать приложения из автозапуска, просто выключая их работу в фоновом режиме.
Андроид – продуманная операционная система, поэтому она сама распознает процессы и программы, которые могут работать в фоне и позволяет отключать это. А если приложение не может работать в данном режиме и автоматически запускаться, этого ползунка не будет предусмотрено изначально.
Инструкция для Android 7 и ниже
Если у вас более старая версия, то вам стоит выполнить ряд следующих действий. Они также могут быть полезны и для Android Oreo версий:
Использование All-In-One Toolbox
-
Установите All-In-One Toolbox из официального магазина с помощью представленной ниже кнопки.
О фоновой работе приложений в Android есть много статей, но мне не удалось найти подробного руководства по реализации работы в фоне – думаю, из-за того, что появляется все больше новых инструментов для такой работы. Поэтому я решил написать серию статей о принципах, инструментах и методах асинхронной работы в приложениях под Android.
Будет несколько частей:
- Основной поток, осуществление фоновой работы с помощью AsyncTask, публикация результатов в основном потоке.
- Затруднения при использовании AsyncTask. Loaders как один из способов их избежать.
- Работа в фоне с помощью ThreadPools и EventBus.
- RxJava 2 как метод асинхронной работы.
- Корутины в Kotlin как метод асинхронной работы.
Начнем с первой части.
Первое, что следует понять, – почему мы вообще беспокоимся о работе в фоне в мобильных приложениях.
Во всех приложениях для Android есть хотя бы один поток, на котором происходит прорисовка UI и обработка пользовательского ввода. Поэтому он и называется потоком UI или главным потоком.
Каждый метод жизненного цикла каждого компонента вашего приложения, включая Activity, Service и BroadcastReceiver, исполняется на UI-потоке.
Человеческий глаз преобразовывает сменяющиеся изображения в плавное видео, если частота смены достигает 60 кадров в секунду (да, это магическое число берется отсюда), давая основному потоку только 16 мc для прорисовки всего экрана.
Продолжительность сетевого вызова может быть в тысячи раз больше.
Когда мы хотим загрузить что-либо из Интернета (прогноз погоды, пробки, сколько стоит ваша часть биткоина в данный момент), мы не должны делать это из главного потока. Более того, Android не позволит нам, выбросив NetworkOnMainThreadException.
Семь лет назад, когда я разрабатывал свои первые приложения на Android, подход от Google был ограничен использованием AsyncTasks. Давайте посмотрим, как мы писали код для общения с сервером (псевдокод преимущественно):
Метод doInBackground() гарантированно будет вызван не на основном потоке. Но на каком? Зависит от реализации. Вот как Android выбирает поток (это часть исходного кода класса AsyncTask):
Здесь можно увидеть, что выполнение зависит от параметра Executor. Посмотрим, откуда он берется:
Как здесь указано, по умолчанию executor ссылается на пул потоков размера 1. Это означает, что все AsyncTasks в вашем приложении запускаются последовательно. Это не всегда было верно, так как для версий ОС от DONUT до HONEYCOMB использовался пул размером от 2 до 4(в зависимости от количества ядер процессора). После HONEYCOMB AsyncTasks снова выполняются последовательно по умолчанию.
Итак, работа выполнена, байты закончили свое длинное путешествие с другого полушария. Нужно превратить их во что-то понятное и разместить на экране. К счастью, наша Activity тут как тут. Давайте поместим результат в одно из наших View.
О, черт! Опять исключение!
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Но мы не делали никаких сетевых обращений на основном потоке! Правильно, но мы попытались нарушить другой закон UI. Пользовательский интерфейс можно менять только из UI-потока. Это верно не только для Android, но и практически для любой системы, с которой вы столкнетесь. Причину этого хорошо объяснили в Java Concurrency In Practice. Вкратце – архитекторы хотели избежать сложной блокировки при изменениях из нескольких источников (пользовательский ввод, биндинг и другие изменения). Использование единственного потока решает эту проблему.
Да, но UI все равно нужно обновлять. У AsyncTask есть еще метод onPostExecute, который вызывается на UI-потоке:
Как эта магия работает? Посмотрим в исходном коде AsyncTask:
AsyncTask использует Handler для вызова onPostExecute в UI, ровно как и метод postOnUiThread в компонентах Android.
Для Android это реализовано классом Looper, который передается в InternalHandler в приведенном выше коде. Суть класса Looper находится в методе loop:
Кстати, вы только что узнали, как проверить, вызывается ли ваш код в UI-потоке:
Если вы попытаетесь создать экземпляр Handler в методе doInBackground, то получите другое исключение. Оно сообщит о необходимости наличия Looper для потока. Теперь вы знаете, что это значит.
Надо заметить, что AsyncTask может быть создан только в UI-потоке по указанным выше причинам.
Вы можете подумать, что AsyncTask – это удобный способ выполнения фоновой работы, так как он скрывает сложность и требует немного усилий при использовании, но есть несколько проблем, которые приходится решать по пути:
- Каждый раз нужно писать достаточно много кода для решения относительно простой задачи
- AsyncTasks ничего не знают о жизненном цикле. При неправильном обращении лучшее, что вы получите — утечка памяти, в худшем – сбой
- AsyncTask не поддерживает сохранение состояния прогресса и повторное использование результатов загрузки.
В следующей части я подробно разберу эти проблемы и покажу, как Loaders могут помочь их решить.
Читайте также: