- Android. Автозапуск приложения при загрузке: теория и практика
- 1. Теория
- 2. Практика: ошибки и особенности эксплуатации
- 3. Отладка ресивера в эмуляторе и на реальных устройствах.
- Итоги
- Как отключить автозапуск приложений на Андроид
- Отключаем автозапуск приложений на Android
- Способ 1: All-In-One Toolbox
- Способ 2: Greenify
- Способ 3: Остановка работающих приложений вручную
- Способ 4: Удаление ненужных приложений
Android. Автозапуск приложения при загрузке: теория и практика
1. Теория
Взглянув на примеры из официального источника (например, этот и этот) и изучив рекомендации на сайте stackoverflow.com, можно выделить следующие правила:
- В манифесте в элементе «manifest» указать разрешение:
В манифесте в элементе «application» зарегистрировать ваш ресивер на прием сообщения ACTION_BOOT_COMPLETED:
Используйте правильное полное или относительное имя класса вашего broadcast-ресивера. В описании ресивера без необходимости не указывайте атрибуты «enabled», «exported» и т.д. Вполне достаточно настроек и атрибутов по умолчанию.
Код вашего broadcast-ресивера:
Если ваш ресивер используется только для сообщения ACTION_BOOT_COMPLETED, то проверка «if» не обязательна. Однако иногда разработчики используют один и тот же ресивер для разных сообщений. В этом случае фильтруйте сообщения, проверяя их внутри метода onReceive.
Приложение должно быть установлено на внутреннюю память. ОС Android устроена таким образом, что сообщение ACTION_BOOT_COMPLETED отправляется приложениям перед монтированием внешний памяти. Поэтому приложения, установленные на внешней памяти, никогда не получат это сообщение. Чтобы указать системе не устанавливать приложение на внешнюю память, в манифесте НЕ нужно прописывать для атрибута «@android:installLocation» значения «auto» или «preferExternal». По умолчанию, т.е. если этот атрибут не указан, ОС установит ваше приложение только на внутреннюю память. Однако согласно официальной документации лучше явно указать значение «internalOnly», чтобы у вас и других разработчиков не возникло искушение в будущем указать иное значение.
После установки или принудительной остановки (force stop) приложение должно быть запущено хотя бы один раз, чтобы система «запомнила» это приложение для отправки ему сообщения ACTION_BOOT_COMPLETED. Такое поведение было реализовано в версии Android 3.1 в целях безопасности. В чем суть? Все только что установленные приложения находятся в состоянии «stopped» (не путать с активити, т.к. ОС управляет этим состоянием у приложений и активити по-разному). В это же состояние приложение «уходит», когда пользователь в настройках телефона принудительно его останавливает. Пока приложение находится в таком состоянии, оно не будет запущено системой ни по какой причине (например, через ACTION_BOOT_COMPLETED), исключая, конечно же, запуск самим пользователем. Благодаря такому нововведению немалая часть«вирусни и троянцев» перестала работать, т.к. уже нет возможности запуститься автоматом после установки.
Исключение составляют системные приложения: см. замечание пользователя kolipass.
Особенности режима Fast boot в HTC-устройствах. Известно, что HTC-устройства не перезагружаются в классическом смысле, а используют так наз. режим Fast boot (это одна из форм гибернации), сохраняя состояние ОС на диск. Поэтому сообщение ACTION_BOOT_COMPLETED не отправляется системой, т.к. в действительности перезагрузка не происходит (см. здесь). Вместо ACTION_BOOT_COMPLETED система может отправить следующие сообщения:
В вашем приложении укажите в теге «receiver» кроме ACTION_BOOT_COMPLETED также вышеуказанные сообщения. Кроме этого необходимо прописать разрешение в дополнение к п.1:
2. Практика: ошибки и особенности эксплуатации
Разберем ошибки, которые совершают новички при настройке приложения и в коде.
- После установки или force stop приложение ни разу не запускалось (см. п.1.5).
Приложение установлено не на внутренней памяти, или пользователь вручную перенес его на внешнюю память (см. п. 1.4).
У некоторых разработчиков прием начинал работать, когда они указывали относительное имя класса ресивера.
Также некоторые разработчики, отлаживая приложение, в logcat не видели своих сообщений из ресивера. Используйте Toast для отладки:
Опечатки или несуществующие сообщения внутри тега ресивера:
Неправильное положение элементов в манифесте приложения:
- «uses-permission» должен быть указан только как прямой потомок элемента «manifest», не нужно его указывать/дублировать в теге «receiver»;
- тег «receiver» должен быть указан только как прямой потомок элемента «application».
Как было указано выше, некоторые устройства используют режим Fast boot. Можно попробовать в настройках телефона отключить этот режим или учесть п. 1.6.
В приложении нет ни одной активити, поэтому после установки у пользователя нет возможности хотя бы 1 раз запустить ваше приложение. Из-за этого сообщение ACTION_BOOT_COMPLETED не будет отправлено в ваше приложение.
Не ошибки, но все же: указаны лишние, не обязательные атрибуты в теге «receiver», например («uses-permission», «enabled», «exported»):
3. Отладка ресивера в эмуляторе и на реальных устройствах.
- В терминале выполните:
Далее, чтобы отправить ACTION_BOOT_COMPLETED всем приложениям, наберите в терминале:
Или для отправки ACTION_BOOT_COMPLETED конкретному приложению наберите в терминале:
В эмуляторе: установите ваше ПО, запустив его из студии. При этом студия соберет ваш проект, установит приложение и запустит его. После этого закройте эмулятор (это аналогично выключению на реальном устройстве). Чтобы получить сообщение ACTION_BOOT_COMPLETED, запустите эмулятор из AVD-менеджера, а не с помощью кнопки «Run app» в тулбаре студии.
После запуска эмулятора во вкладке Android Monitor укажите запущенный эмулятор и ваше приложение, чтобы просмотреть логи logcat.
Итоги
Чтобы ваше приложение запускалось при загрузке на всех устройствах, манифест как минимум должен выглядеть так:
Код ресивера, как правило, будет таким:
Надеюсь, эта статья поможет новичкам побороть «коварного врага» под названием «ACTION_BOOT_COMPLETED».
Источник
Как отключить автозапуск приложений на Андроид
Как и в любой другой операционной системе, на Андроид есть программы, работающие в фоновом режиме. Они запускаются автоматически при включении смартфона. Большинство этих процессов необходимы для работы системы и являются ее частью. Однако иногда обнаруживаются такие приложения, которые потребляют слишком много оперативной памяти системы и энергии батареи. В этом случае понадобится самостоятельно приложить усилия, чтобы улучшить производительность и сэкономить заряд батареи.
Отключаем автозапуск приложений на Android
Для того чтобы отключить автозапуск ПО на смартфоне, можно воспользоваться сторонним приложением, отключить процессы вручную или полностью удалить программу с устройства. Разберемся, как это сделать.
Будьте предельно осторожны, останавливая работающие процессы или удаляя приложения, так как это может привести к сбоям в работе системы. Отключайте только те программы, в которых уверены на 100%. Такие инструменты, как будильник, календарь, навигатор, почта, напоминания и другие должны работать в фоновом режиме, чтобы выполнять свою функцию.
Способ 1: All-In-One Toolbox
Многофункциональная программа, с помощью которой можно оптимизировать работу системы путем избавления от ненужных файлов, экономии заряда батареи, а также отключения автозапуска приложений.
- Скачайте и запустите приложение. Откройте доступ к файлам, нажав «Разрешить».
Проведите по экрану пальцем вверх, чтобы увидеть нижнюю часть страницы. Зайдите в раздел «Автозагрузка».
Этот способ хотя и простой, но не слишком надежный, так как без рут-прав некоторые приложения всё равно будут запускаться. Вы можете использовать его в сочетании с другими методами, описанными в статье. Если в вашем телефоне есть рут-доступ, управлять автозапуском можно при помощи программы Autorun Manager.
Способ 2: Greenify
Этот инструмент позволяет анализировать работу приложений в фоновом режиме и на время «усыплять» те из них, которыми вы не пользуетесь в данный момент. Основные преимущества: отсутствие необходимости удалять программы, которые могут понадобиться в будущем и доступность для устройств без root-прав.
- Скачайте и установите приложение. Сразу после открытия появится небольшое описание, читаем и жмем кнопку «Далее».
В следующем окне потребуется указать, есть ли на вашем устройстве root-доступ. Если вы сами не предпринимали каких-либо действий для его получения, то, скорее всего, у вас его нет. Укажите соответствующее значение или выберите «Я не уверен» и нажмите «Далее».
Поставьте галочку, если используете блокировку экрана, и нажмите «Далее».
Если выбран режим без рута или вы не уверены, есть ли рут-права на вашем устройстве, появится окно, где потребуется включить службу специальных возможностей. Нажимаем «Настройка».
В появившемся списке нажмите на приложение Гринифай.
Снова зайдите в приложение Greenify и нажмите «Далее».
Закончите настройку, прочитав предлагаемую информацию. В главном окне нажмите на плюсик в правом нижнем углу экрана.
Откроется окно анализа приложений. Одним нажатием выберите программы, которые хотите усыпить. Нажмите галочку в правом нижнем углу.
В открывшемся окне будут показаны усыплённые приложения и те, которые будут усыплены после отключения. Если вы хотите усыпить сразу все программы, нажмите кнопку «Zzz» в правом нижнем углу.
При возникновении проблем приложение уведомит вас о необходимости ввода дополнительных настроек, просто следуйте инструкциям. В настройках можно создать ярлык гибернации, позволяющий мгновенно усыплять выбранные программы одним нажатием.
Способ 3: Остановка работающих приложений вручную
Наконец, можно вручную отключить процессы, работающие в фоне. Таким образом, вы сможете увеличить производительность или проверить, как повлияет удаление той или иной программы на работу системы перед тем, как избавляться от нее.
- Зайдите в раздел настроек телефона.
Откройте список приложений.
Зайдите во вкладку «Работающие».
Выберите приложение и нажмите «Остановить».
Выбирайте только те процессы, которые не повлияют на работу системы, но если всё же что-то пошло не так, просто перезагрузите устройство. Некоторые системные процессы и службы невозможно остановить без наличия рут-прав.
Способ 4: Удаление ненужных приложений
Последняя и самая крайняя мера противодействия назойливым программам. Если в списке работающих приложений вы обнаружили такие, которыми не пользуетесь ни вы, ни система, можете их удалить.
- Для этого зайдите в «Настройки» и откройте список приложений, как описано выше. Выберите программу и нажмите «Удалить».
Появится предупреждение – нажмите «ОК», чтобы подтвердить действие.
Конечно, чтобы удалить предустановленные или системные приложения, вам понадобятся рут-права, но прежде чем получать их, тщательно взвесьте все «за» и «против».
Получение рут-прав влечет за собой потерю гарантии на устройство, прекращение автоматических обновлений прошивки, риск потерять все данные с дальнейшей необходимостью перепрошивки, возложение на пользователя полной ответственности за безопасность устройства.
Последние версии Android достаточно успешно справляются с фоновыми процессами, и если у вас установлены качественные, хорошо проработанные приложения, то беспокоиться не о чем. Удаляйте только те программы, которые перегружают систему, требуя слишком много ресурсов вследствие ошибок разработки.
Помимо этой статьи, на сайте еще 12473 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Источник