В чем разница между android:persistent и android:priority? Какое влияние это оказывает на приоритет процесса?
В чем разница между android:persistent и android:priority? Какое влияние это оказывает на приоритет процесса?
Предисловие: Я удалил написанный мной apk, потому что система была занята (прил. 900): убить весь фон. После добавления android:persistent="true" в AndroidManifest.xml Сторона А попросила меня не делать этого, поэтому я все равно сделал это. чтобы изменить его с прил. Изменить приоритет на 1000.
android:persistent и android:priority — это два разных атрибута, которые используются для разных целей.
android:persistent: используется для определения того, имеет ли компонент приложения постоянство. Когда для android:persistent установлено значение true, это означает, что компонент является постоянным и сохранит свое состояние даже после перезапуска устройства. Установка значения false означает, что компонент не сохраняется и будет уничтожен после перезапуска.
android:priority: используется для установки приоритета компонентов. Этот атрибут обычно используется для приемников широковещательных сообщений (BroadcastReceiver). Вы можете определить порядок и приоритет получения широковещательных сообщений, установив android:priority. Более высокие значения указывают на более высокий приоритет.
Эти два свойства не оказывают прямого влияния на приоритет процесса. Приоритет процесса динамически управляется системой Android и корректируется в зависимости от активности и требований к ресурсам работающего в данный момент приложения. Система определяет приоритетность процессов на основе таких факторов, как приложение, с которым в данный момент взаимодействует пользователь, служба переднего плана и т. д.
Хотя android:priority может в некоторой степени влиять на порядок выполнения приемников вещания, он не влияет напрямую на приоритет процесса. Приоритет процесса определяется системой на основе ряда политик и алгоритмов, а не только на основе настроек свойств определенного компонента.
Что касается методов поддержания работоспособности Сервиса и повышения приоритета компонентов Сервиса в приложениях Android, его можно резюмировать следующим образом:
Установите высший приоритет. В файле AndroidManifest.xml установите высший приоритет, задав для атрибута android:priority более высокое значение (например, 1000). Это работает для приемников вещания.
Используйте метод startForeground(): вызовите метод startForeground() в методе onStartCommand() Службы, чтобы повысить уровень Службы до уровня приоритетного процесса. Не забудьте вызвать метод stopForeground() в методе onDestroy() службы.
Возврат START_STICKY: вручную верните START_STICKY в методе onStartCommand() службы, чтобы его можно было перезапустить после уничтожения службы.
Отправьте широковещательную рассылку для перезапуска Службы. Отправьте пользовательскую трансляцию в методе onDestroy() Службы и перезапустите Службу после получения широковещательной рассылки. Обратите внимание, что этот метод не гарантированно будет работать при принудительной остановке приложений в сторонних приложениях или в настройках системы.
Отслеживайте системную трансляцию, чтобы определить статус службы: слушайте системную трансляцию, например сотовый. Перезапуск телефона, пробуждение интерфейса, изменение статуса приложения и т. д., чтобы определить, работает ли Сервис.
Несколько приложений активируют друг друга: разные приложения привязаны друг к другу и активируют друг друга.
Установите будильник для регулярного пробуждения. Используйте AlarmManager, чтобы установить будильник и периодически активировать Службу в указанное время.
Включите службу переднего плана: установите службу в качестве службы переднего плана и увеличьте ее приоритет.
Зацикливание бесшумного звука в Сервисе. Зацикливание бесшумного звука в Сервисе может в определенной степени улучшить эффект поддержания активности, но приведет к увеличению энергопотребления.
Двойной процессGuardian (Android Действительно до версии 5.0): путем запуска независимого процесса-демона и основного процесса для мониторинга и активации друг друга.
JobScheduler (введен после Android 5.0, недействителен после 8.0): используйте JobScheduler для планирования задач для регулярного пробуждения Службы.
Решение для поддержания активности пикселей (не рекомендуется). Создайте прозрачное действие размером 1 пиксель и установите его в качестве плавающего окна, чтобы приложение продолжало работать.
Экран блокировки трансляции, настраиваемый экран блокировки (не рекомендуется). Поддерживайте работоспособность вашего устройства, прослушивая трансляции экрана блокировки или настраивая интерфейс экрана блокировки, но этот метод может оказать негативное влияние на работу пользователя.
Пробуждение с помощью стороннего push-SDK: для поддержания активности используйте механизм пробуждения стороннего push-SDK, но для этого требуется доступ к сторонним службам.
Собственный уровень — это дочерний процесс: создайте дочерний процесс на собственном уровне и взаимодействуйте с основным процессом для достижения взаимной поддержки.
与сотовый телефон Связь с производителем: с сотовым Производитель телефона связывается, помещает приложение в белый список системы и снижает значение oom_adj, чтобы гарантировать, что система не уничтожит процесс.
Добавьте атрибут Persistent в AndroidManifest.xml. Добавьте атрибут android:persistent="true" в узел приложения, чтобы указать, что приложение имеет постоянство.
Советы. Применимость и эффективность вышеуказанных методов могут различаться в зависимости от таких факторов, как версия Android, марка устройства и системная политика.
Действительно, используя собственное приложение в качестве системного приложения (каталог установки — /system/apk/) и устанавливая атрибут android:persistent="true", можно добиться персистентности, то есть приложение будет загружаться при запуске системы. запускается и загружается при возникновении исключения, автоматически перезапускается.
Принцип достижения такой устойчивости заключается в том, что AMS (ActivityManagerService) загружает все приложения с постоянным значением true при запуске системы. Для постоянных приложений, когда процесс приложения неожиданно завершается, AMS попытается перезапустить процесс приложения, чтобы обеспечить сохранение приложения.
Следует отметить, что этот метод применим только в том случае, если приложение установлено как системное и устанавливается в каталог /system/apk/. Путь после установки обычного приложения — /data/apk/, даже если установлен атрибут android:persistent, он не вступит в силу.
Обязательным условием использования одной строки кода для выполнения задач является использование приложения в качестве системного приложения и перезагрузка телефона, прежде чем оно вступит в силу. Однако этот подход требует соблюдения определенных условий и ограничений и может подходить не для всех сценариев. Поэтому, чтобы обеспечить надежность и стабильность приложения, обычно необходимо комбинировать другие методы для реализации требований поддержания работоспособности службы и повышения приоритета.