Net control service на андроид что это
Покупая новый смартфон на Android, пользователь зачастую сталкивается с огромным множеством непонятных ему приложений, предустановленных производителем. Зачем они нужны? Нужны ли они вообще? Можно ли их удалить и не повлияет ли это на работу смартфона?
Как удалить приложение на Android?
Прежде чем мы перейдем к сути вопроса, вспомним, как удалять приложения на Android-смартфоне. На некоторых смартфонах достаточно нажать пальцем на иконку приложения и подержать пару секунд. В появившемся меню выбрать пункт Удалить или Отключить:
Но, в большинстве случаев, для удаления приложения необходимо зайти в Настройки смартфона, там выбрать пункт Приложения. После выбора нужного приложения, открываем его и нажимаем Удалить (или Выключить). В зависимости от марки смартфона, все может выглядеть немного по-другому, но, принцип тот же:
Список приложений, которые следует сразу удалить
Сегодня мы рассмотрим наиболее часто встречающиеся предустановленные приложения, которые можно смело удалять со своего новенького смартфона, не только освободив дополнительную память, но и увеличив тем самым время работы смартфона (так как лишние приложения могут работать в фоне и тратить заряд аккумулятора впустую).
Итак, проверьте, не встречаются ли у вас приложения из нашего списка:
Диск
Защищенная папка
Приложение от Samsung, позволяющее скрывать различные файлы или даже приложения от посторонних людей. Достать что-либо из этой папки можно только по паролю\отпечатку пальца. Если вы не работаете на спец.службы, с этим приложением можно расстаться.
Google Карты
Словарь
Briefing
Duo
Этому приложению можно смело дать звание самого бесполезного приложения от Google. Конечно, сама идея (осуществление видео-звонков) отличная, вот только никто этим приложением не пользуется, так как есть гораздо более популярные аналоги: Skype, Viber, WhatsApp или Facebook Messanger. Смело удаляйте!
Wear
Gmail
Google Фото
Google Музыка
Очень удобное приложение для прослушивания музыки. Проблема состоит лишь в том, что нужно оплачивать его ежемесячную подписку. А если вы не слушаете музыку по подписке, смысла в этом приложении нет никакого, ведь для прослушивания своих mp3 есть множество более удобных и функциональных аналогов.
Google Фильмы
Если предыдущее приложение для музыки еще имеет смысл оставить (и очень многие, включая меня, им пользуются), тогда это приложение можно смело удалять. Если, конечно, вы не против платить за просмотр одного фильма по $10-$20 (или брать его напрокат за $1), да еще без перевода (многие фильмы идут только с оригинальной дорожкой).
OneDrive
PowerPoint
Когда в последний раз вы создавали или просматривали на своем смартфоне PowerPoint-презентацию? Смело удаляйте это приложение, если оно было установлено на вашем смартфоне из магазина.
Smart Switch
Что бы еще удалить?
Здесь мы не говорили о таких простых приложениях, как Блокнот или Музыкальный проигрыватель. По названию приложения уже понятно, что его можно удалить без каких-либо последствий, если оно вас не устраивает.
- Блокнот
- Заметки
- Здоровье
- Зеркало
- Компас
- Погода
- Сканер
- Советы
- Центр игр
- Android Accessibility Suite (важно для людей с ограниченными возможностями)
- Facebook App Installer
- Facebook App Manager
- Facebook Services (эти 3 приложения можно удалить, если не используете Facebook)
- HiCare (техподдержка смартфонов Huawei)
- Huawei Device (приложение на Huawei, которое является просто ссылкой на сайт компании)
- Phone Clone (перенос всех данных со старого смартфона на новый, аналог Smart Switch от Samsung)
- Samsung Internet, Mi Браузер и другие браузеры (всё это аналоги Google Chrome, а потому есть смысл оставить только одно приложения для выхода в интернет)
Но даже если вы удалите только перечисленные выше приложения, сможете уже освободить достаточно много места на смартфоне, а также продлить время его работы от одной зарядки!
WorkManager и foreground service
Foreground service — это какой-либо сервис, о котором знает пользователь через нотификацию в статус-баре. Например, воспроизведение музыки или работа GPS в картах.
WorkManager — это API для планирования задач, которые будут выполняться, даже если выйти из приложения или перезагрузить устройство.
WorkManager уже давно является приоритетным способом выполнения длительных фоновых задач. К таким относятся синхронизация данных с бэкендом, отправка аналитики, периодическая проверка свободного места в системе с помощью PeriodicWork и так далее.
Но в WorkManager присутствовал и недостаток — не было никаких гарантий, что джоба начнётся незамедлительно после создания. В версии 2.3.0 разработчики добавили для воркеров метод setForegroundAsync(), который, по сути, превращал фоновую задачу в foreground-сервис и позволял немедленно приступить к её выполнению.
Такой подход ничем особо не отличался от разработки foreground-сервиса вручную, когда необходимо создавать объекты Notification и NotificationChannel при таргете выше, чем на Android Nougat.
Сейчас setForegroundAsync() объявлен устаревшим, а при попытке запустить сервис из бэкграунда на выходе будет ForegroundServiceStartNotAllowedException.
Вместо заключения
Переехать на expedited job довольно легко, особенно, если в проекте уже подключен WorkManager.
Сейчас пропала необходимость держать нотификацию в статус-баре, а в условиях выполнения задачи появилась дополнительная гибкость благодаря возможностям WorkManager. Например, теперь можно пережить «смерть» процесса, тонко настраивать ретраи, периодичность выполнения задач и многое другое.
PlayService.java
Зарегистрируем службу в файле манифеста.
В файле разметки для активности определим две кнопки: Старт и Стоп:
В классе активности в обработчиках событий кнопок будем вызывать методы startService() и stopService() для управления службой.
Запущенная служба будет выполняться независимо от состояния активности, несмотря на то, что эти компоненты находятся в одном приложении: если её завершить, служба все равно останется работать.
Приёмник регистрируется в манифесте с именем действия BOOT_COMPLETED:
Пример для Kotlin
Класс для службы, которая будет генерировать случайные числа через определённый промежуток времени. Не забудьте прописать службу в манифесте.
Разместите на экране активности три кнопки: запуск, остановка и статус службы. Код для активности.
Работа с фоновыми задачами в Android 12: переезжаем с foreground service на expedited jobs
С релизом Android 12 приложения, где новая версия операционки будет указана в targetSdkVersion, получат запрет на запуск foreground-сервисов в бэкграунде. В качестве альтернативы Google предлагает WorkManager, который с появлением expedited jobs станет предпочтительным вариантом для запуска высокоприоритетных фоновых задач.
О нём и пойдёт речь в статье — под катом обсудим новые возможности инструмента, подключим его к приложению и реализуем миграцию с foreground-сервиса.
Список всех запущенных сервисов
Expedited jobs
Этот тип джобов позволяет приложениям выполнять короткие и важные задачи, давая системе больше контроля над доступом к ресурсам. Он находится где-то между foreground-сервисами и привычными джобами WorkManager. От последних их отличает:
минимально отложенное время запуска;
обход ограничений Doze-mode на использование сети;
меньшая вероятность быть «убитыми» системой.
А ещё в них не поддерживаются ограничения по заряду батареи и режиму работы девайса:
Если же ограничения по квоте, сети и памяти устройства выполнены, то у джобы будет около минуты на выполнение своих функций. Иногда больше, но это сильно зависит от лимита и общей загруженности системы.
Создание службы
Чтобы определить службу, необходимо создать новый класс, расширяющий базовый класс Service. Можно воспользоваться готовым мастером создания класса для сервиса в Android Studio. Щёлкаем правой кнопкой мыши на папке java (или на имени пакета) и выбираем New | Service | Service:
В следующем окне выбираем имя сервиса (флажки оставляем) и нажимаем кнопку Finish.
При этом сервис автоматически зарегистрируется в манифесте в секции <application>.
Если бы мы убрали флажки на экране мастера, то оба атрибута имели бы значение false. Например, атрибут exported даёт возможность другим приложениям получить доступ к вашему сервису.
Имеются и другие атрибуты, например, permission, чтобы сервис запускался только вашим приложением.
Также вы можете обойтись без мастера и создать вручную класс сервиса и запись в манифесте, теперь вы знаете, из чего он состоит.
Жизненный цикл служб
Подобно активностям служба имеет свои методы жизненного цикла:
Для быстрого создания заготовок нужных методов используйте команду меню Code | Override Methods. или набирайте сразу имя метода, используя автодополнение.
Реализуя эти методы обратного вызова в своей службе, вы можете контролировать жизненные циклы службы. В полном жизненном цикле службы существует два вложенных цикла:
- полная целая жизнь службы — промежуток между временем вызова метода onCreate() и временем возвращения onDestroy(). Подобно активности, для служб производят начальную инициализацию в onCreate() и освобождают все остающиеся ресурсы в onDestroy()
- активная целая жизнь службы — начинается с вызова метода onStartCommand(). Этому методу передаётся объект Intent, который передавали в метод startService().
Из своего приложения службу можно запустить вызовом метода Context.startService(), остановить через Context.stopService(). Служба может остановить сама себя, вызывая методы Service.stopSelf() или Service.stopSelfResult().
Можно установить подключение к работающей службе и использовать это подключение для взаимодействия со службой. Подключение устанавливают вызовом метода Context.bindService() и закрывают вызовом Context.unbindService(). Если служба уже была остановлена, вызов метода bindService() может её запустить.
Методы onCreate() и onDestroy() вызываются для всех служб независимо от того, запускаются ли они через Context.startService() или Context.bindService().
Если служба разрешает другим приложениям связываться с собой, то привязка осуществляется с помощью дополнительных методов обратного вызова:
- IBinder onBind(Intent intent)
- onUnbind(Intent intent)
- onRebind(Intent intent)
В метод обратного вызова onBind() передают объект Intent, который был параметром в методе bindService(), а в метод обратного вызова onUnbind() — объект Intent, который передавали в метод unbindService(). Если служба разрешает связывание, метод onBind() возвращает канал связи, который используют клиенты, чтобы взаимодействовать со службой. Метод обратного вызова onRebind() может быть вызван после onUnbind(), если новый клиент соединяется со службой.
Запуск сервиса и управление его перезагрузкой
В большинстве случаев также необходимо переопределить метод onStartCommand(). Он вызывается каждый раз, когда сервис стартует с помощью метода startService(), поэтому может быть выполнен несколько раз на протяжении работы. Вы должны убедиться, что ваш сервис это предусматривает.
Метод onStartCommand() заменяет устаревший метод onStart(), который использовался в Android 2.0. В отличие от onStart() новый метод позволяет указать системе, каким образом обрабатывать перезапуски, если сервис остановлен системой без явного вызова методов stopService() или stopSelf().
Службы запускаются в главном потоке приложения; это значит, что любые операции, выполняющиеся в обработчике onStartCommand(), будут работать в контексте главного потока GUI. На практике при реализации сервиса в методе onStartCommand() создают и запускают новый поток, чтобы выполнять операции в фоновом режиме и останавливать сервис, когда работа завершена.
Такой подход позволяет методу onStartCommand() быстро завершить работу и даёт возможность контролировать поведение сервиса при его повторном запуске, используя одну из констант.
- START_STICKY - Описывает стандартное поведение. Похоже на то, как был реализован метод onStart() в Android 2.0. Если вы вернёте это значение, обработчик onStartCommand() будет вызываться при повторном запуске сервиса после преждевременного завершения работы. Обратите внимание, что аргумент Intent, передаваемый в onStartCommand(), получит значение null. Данный режим обычно используется для служб, которые сами обрабатывают свои состояния, явно стартуя и завершая свою работу при необходимости (с помощью методов startService() и stopService()). Это относится к службам, которые проигрывают музыку или выполняют другие задачи в фоновом режиме
- START_NOT_STICKY - Этот режим используется в сервисах, которые запускаются для выполнения конкретных действий или команд. Как правило, такие службы используют stopSelf() для прекращения работы, как только команда выполнена. После преждевременного прекращения работы службы, работающие в данном режиме, повторно запускаются только в том случае, если получат вызовы. Если с момента завершения работы Сервиса не был запущен метод startService(), он остановится без вызова обработчика onStartCommand(). Данный режим идеально подходит для сервисов, которые обрабатывают конкретные запросы, особенно это касается регулярного выполнения заданных действий (например, обновления или сетевые запросы). Вместо того, чтобы перезапускать сервис при нехватке ресурсов, часто более целесообразно позволить ему остановиться и повторить попытку запуска по прошествии запланированного интервала
- START_REDELIVER_INTENT - В некоторых случаях нужно убедиться, что команды, которые вы посылаете сервису, выполнены. Этот режим — комбинация предыдущих двух. Если система преждевременно завершила работу сервиса, он запустится повторно, но только когда будет сделан явный запрос на запуск или если процесс завершился до вызова метода stopSelf(). В последнем случае вызовется обработчик onStartCommand(), он получит первоначальное намерение, обработка которого не завершилась должным образом.
Обратите внимание, что при окончании всех операций каждый из этих режимов требует явной остановки сервиса с помощью методов stopService() или stopSelf().
Режим перезапуска, который вы указываете в качестве значения, возвращаемого методом onStartCommand(), будет влиять на параметры, передаваемые при последующих вызовах.
Изначально намерение выступает в качестве параметра, который передастся в метод startService() при запуске сервиса. После перезапуска системой он может иметь значение null (если установлен режим START_STICKY) или оригинальное (если установлен флаг START_REDELIVER_INTENT).
Параметр flag может помочь узнать, как именно был запущен сервис:
- START_FLAG_REDELIVERY — указывает на то, что параметр Intent повторно передан при принудительном завершении работы сервиса перед явным вызовом метода stopSelf()
- START_FLAG_RETRY — указывает на то, что сервис повторно запущен после непредвиденного завершения работы; передается в том случае, если ранее сервис работал в режиме START_STICKY
Запуск и остановка служб
Начиная с Android 8.0 вы можете получить исключение IllegalStateException, если у приложения нет разрешения на запуск от системы.Чтобы запустить службу, в клиентском приложении необходимо вызывать метод startService(). Существует два способа вызова службы:
Пример для явного вызова службы с именем MyService:
Также можно явно определить службу, создав экземпляр класса этой службы.
Пример неявного вызова службы:
Чтобы использовать этот пример, необходимо включить константу SERVICE_ACTION, идентифицирующую службу, в класс MyService, например:
Используйте фильтр намерений, чтобы зарегистрировать его как провайдера SERVICE_ACTION. Если служба потребует разрешений, которые не имеет ваше приложение, то запрос вызовет исключение SecurityException.
Как только сервис завершил выполнение тех действий, для которых он запускался, вы должны вызвать метод stopSelf() либо без передачи параметра, чтобы ускорить остановку работы, либо передав значение startId, чтобы убедиться, что задачи выполнены для всех экземпляров, запущенных с помощью вызова startService(), как показано в следующем фрагменте:
Явная остановка сервиса по завершении необходимых задач позволяет системе получать обратно ресурсы, которые в ином случае оставались бы заняты. Поскольку приоритет сервисов повышенный, система, как правило, не завершает их работу, поэтому её окончание по собственной инициативе может существенно улучшить эффективность использования ресурсов вашим приложением.
Для остановки работы используйте метод stopService(), передавая ему объект Intent, определяющий нужный сервис.
Если метод startService() вызывается для сервиса, который уже работает, обработчик onStartCommand(), принадлежащий объекту Service, будет вызван повторно. Вызовы startService() не накапливаются, поэтому единственный вызов метода stopService() завершит работу сервиса, неважно, сколько раз производился вызов startService().
Давайте создадим практическое приложение для работы со службой. Наша служба будет запускать на воспроизведение музыкальный файл, который будет проигрываться в фоновом режиме. Управлять службой можно будет из активности. Создайте новый проект. Для службы создайте отдельный класс PlayService. Служба будет загружать музыкальный файл sample.mp3 из каталога res/raw/ (разместите там свой MP3-файл).
Миграция foreground service на expedited job
Стандартный сервис для выполнения фоновых задач обычно выглядит примерно так:
А запускается так:
Поговорим о том, как перевести этот сервис на expedited job. Происходит это буквально в три простых шага.
1. Подключаем WorkManager к проекту:
2. Создаём класс, наследующийся от Worker (он будет выполнять задачу, которую раньше делал сервис):
3. Создаём WorkRequest и передаём его для запуска в WorkManager:
Здесь есть важный параметр OutOfQuotaPolicy, который отвечает за поведение при невозможности запустить джобу немедленно. Он существует в двух вариантах:
RUN_AS_NON_EXPEDITED_WORK_REQUEST — при заполненной квоте запустится обычная джоба, не expedited.
DROP_WORK_REQUEST — при заполненной квоте запрос на выполнение сразу зафейлится.
На этом, собственно, базовая миграция заканчивается.
Системные службы
Кроме создания собственных сервисов, вы можете использовать системные сервисы. Вот небольшой список:
Ущемление прав службы
Google последовательно борется с ограничениями для служб, урезая их возможности. Делается это для того, чтобы службы не висели в памяти бесконечно долго и тратили заряд батареи. Ограничение возможностей происходит постепенно от версии к версии. В последних версиях уже можно столкнуться с примерами, когда выкидывается исключение при неправильной работе с службами.
Для решения проблем следует изучить такие вещи как JobScheduler, Firebase Job Dispatcher, WorkManager. Также появилось понятие Foreground service.
Служба (Service)
Службы (Сервисы) в Android работают как фоновые процессы и представлены классом android.app.Service. Они не имеют пользовательского интерфейса и нужны в тех случаях, когда не требуется вмешательства пользователя. Сервисы работают в фоновом режиме, выполняя сетевые запросы к веб-серверу, обрабатывая информацию, запуская уведомления и т.д. Служба может быть запущена и будет продолжать работать до тех пор, пока кто-нибудь не остановит её или пока она не остановит себя сама. Сервисы предназначены для длительного существования, в отличие от активностей. Они могут работать, постоянно перезапускаясь, выполняя постоянные задачи или выполняя задачи, требующие много времени.
Клиентские приложения устанавливают подключение к службам и используют это подключение для взаимодействия со службой. С одной и той же службой могут связываться множество клиентских приложений.
Android даёт службам более высокий приоритет, чем бездействующим активностям, поэтому вероятность того, что они будут завершены из-за нехватки ресурсов, заметно уменьшается. По сути, если система должна преждевременно завершить работу запущенного сервиса, он может быть настроен таким образом, чтобы запускаться повторно, как только станет доступно достаточное количество ресурсов. В крайних случаях прекращение работы сервиса (например, задержка при проигрывании музыки) будет заметно влиять на впечатления пользователя от приложения, и в подобных ситуациях приоритет сервиса может быть повышен до уровня активности, работающей на переднем плане.
Используя сервис, можете быть уверены, что ваши приложения продолжат работать и реагировать на события, даже если они в неактивном состоянии. Для работы службам не нужен отдельный графический интерфейс, как в случае с активностями, но они по-прежнему выполняются в главном потоке хода приложения. Чтобы повысить отзывчивость вашего приложения, нужно уметь переносить трудоёмкие процессы (например, сетевые запросы) в фоновые потоки, используя классы Thread и AsyncTask.
Службы идеально подходят для проведения постоянных или регулярных операций, а также для обработки событий даже тогда, когда активности вашего приложения невидимы, работают в пассивном режиме или закрыты.
Сервисы запускаются, останавливаются и контролируются из различных компонентов приложения, включая другие сервисы, активности и приёмники широковещательных намерений. Если ваше приложение выполняет задачи, которые не зависят от прямого взаимодействия с пользователем, сервисы могут стать хорошим выбором.
Запущенные сервисы всегда имеют больший приоритет, чем бездействующие или невидимые активности, поэтому менее вероятно, что их работа завершится преждевременно при распределении ресурсов. Единственная причина, почему Android может досрочно остановить Сервис, — выделение дополнительных ресурсов для компонентов, работающих на переднем плане (как правило, для активностей). Если такое случится, ваш сервис автоматически перезапустится, когда будет достаточно доступных ресурсов.
Когда сервис напрямую взаимодействует с пользователем (например, проигрывая музыку), может понадобиться повысить его приоритет до уровня активностей, работающих на переднем плане. Это гарантия того, что сервис завершится только в крайнем случае, но при этом снижается его доступность во время выполнения, мешая управлять ресурсами, что может испортить общее впечатление от приложения.
Приложения, которые регулярно обновляются, но очень редко или нерегулярно взаимодействуют с пользователем, можно назвать первыми кандидатами на реализацию в виде сервисов. Проигрыватели MP3 и приложения, отслеживающие спортивные результаты, — примеры программ, которые должны постоянно работать и обновляться без необходимости отображать активность.
Секреты MIUI 🉑 Убираем из смартфона бессмысленные приложения
«Это одна из последних статей на тему отключения различного программного хлама в MUI 12 на базе Android 10. Нам осталось отключить ещё около 5 приложений и сервисов, которые впустую тратят мобильный интернет, оперативную память и заряд батареи, после чего, я выпущу статью с финальным списком и пресетом для ADB App Control и перейду к изучению Android 11.
Как показывают отзывы читателей, многим удалось значительно улучшить работу своих смартфонов, чему я очень рад и надеюсь, что эта статья тоже окажется вам полезной».
Начнём с простого
Приложение «Smart-Divert» присутствует во многих смартфонах с двумя Sim-картами и если говорить простым языком, служит для того, чтобы в момент когда вы говорите по одной симке, а на вторую поступает входящий звонок, происходила переадресация.
Но его бессмысленность, заключается в техническом устройстве наших гаджетов, ведь в большинстве из них установлен только один радиомодуль, следовательно, он физически не может поддерживать одновременную работу двух Sim-карт. Проверьте есть ли это приложение в вашем смартфоне, воспользовавшись поиском в пункте "Все приложения". Только показ системных включить не забудьте.
Как вы видите, «Smart-Divert» постоянно находится в активном состоянии, расходуя ресурсы системы и оперативную память, которой как известно, много не бывает.
Поэтому я рекомендую отключить его, через уже знакомое вам приложение ADB App Control (если не знаете что это, ссылка на статью будет ниже). Замечу, что на всех своих смартфонах это приложение я отключил и никаких сбоев в работе не обнаружил.
Перед тем как я перейду к «вишенке на торте», небольшая предыстория: Обратился ко мне человек с проблемой плохой работы определения местоположения после одного из последних обновлений. Перепробовали всё, и местоположение Google отключали, и данные A-GPS чистили - результата ноль.
В итоге, на одном из форумов я вычитал, что проблема может крыться в приложении «LocationServices» от Qualcomm. А зайдя на своём смартфоне в «Настройки» —> Приложения —> Все приложения —> Три точки (Показать все приложения), обнаружил что оно постоянно висит в фоне и потребляет (в моём случае) 272 Мб оперативной памяти.
Начал интересоваться и выяснил, что работа GPS после отключения этого сервиса, остаётся такой же как была (подтверждение ниже).
На всех своих смартфонах Xiaomi я его отключил, весь день пользовался навигатором, тестировал приём спутников - никаких проблем нет. В итоге проблема обратившегося человека была решена, а в добавок ко всему, я нашёл ещё одну службу, которая расходовала достаточно большой объём памяти.
Более того, после отключения (в моём случае) расход аккумулятора, заметно уменьшился и уже потом я прочёл, что статистика расхода батареи «LocationServices» входит в строку «Система Android».
Можете последовать моему примеру и отключить её на своём смартфоне через ADB App Control, тем более, любое отключённое приложение можно восстановить без проблем.
Читайте также: