Выгружает ли Android память, используемую службами переднего плана?

Глядя на устройство Android KitKat производства LG, я вижу, что приложение всегдаSoftware Update работает как служба переднего плана (100). Эта служба занимает значительный объем памяти.

Из того, что я могу сказать, это приложение предназначено только для OTA-обновлений, что является исключительно редким событием (до сих пор никогда не случалось!).

Чтобы освободить часть рабочей памяти, я подумал о том, чтобы запретить запуск приложения при загрузке (отключив его широковещательный приемник), а затем просто запускать его вручную время от времени для проверки обновлений.

Но прежде чем я это сделаю, я хочу спросить, имеет ли это вообще значение? Для приложений, которые всегда запускают службу переднего плана, будет ли Android просто выгружать их из памяти, как фоновое приложение? Или память, которую они используют, всегда полностью заблокирована, что делает мой план стоящим?

Вы пытались просто отключить автоматические обновления OTA в настройках >> о телефоне
Хороший вопрос. Да, я зашел в «Настройки» -> «О телефоне» -> «Центр обновлений» и выбрал « Выкл .» для цикла уведомлений об обновлениях .
Понятно, почему бы не заморозить его? Время от времени размораживайте, чтобы избежать лишних хлопот

Ответы (1)

Вы сказали :

(отключив его широковещательный приемник)


Сначала позвольте мне указать, что это не одно Broadcast Receiverи Serviceто же, вы получите разницу между ними по ответу.

Широковещательные приемники:

BroadcastReceiver позволяет приложению работать в течение короткого промежутка времени в фоновом режиме в результате чего-то другого. При обработке широковещательной передачи приложению дается фиксированный набор времени (в настоящее время 10 секунд), в течение которого оно должно выполнять свою работу. Если оно не завершится за это время, приложение будет считаться некорректно работающим, и его процесс будет немедленно переведен в фоновое состояние, чтобы при необходимости быть уничтоженным для использования памяти.

Итак, как вы можете прочитать, BroadcastReceiver не может поддерживать работу приложения в фоновом режиме более 10 секунд, что является своего рода ограничением, верно? вот почему есть услуги.

Услуги :

  • Цитата того же автора из той же статьи:

Служба позволяет приложению выполнять длительные фоновые операции. На самом деле есть много других функций, которые предоставляют сервисы.

Управление процессами Android для служб отличается от широковещательных приемников, поскольку неограниченное количество служб может запрашивать запуск в течение неизвестного периода времени. Оперативной памяти может не хватить для запуска всех запрашивающих служб, поэтому нет надежных гарантий их работы.

Если оперативной памяти слишком мало, процессы, на которых размещены сервисы, будут немедленно убиты, как и фоновые процессы. Однако, если это уместно, Android запомнит, что эти службы хотят продолжать работать, и перезапустит свой процесс позже, когда будет доступно больше оперативной памяти. Например, если пользователь переходит на веб-страницу, требующую большого объема оперативной памяти, Android может остановить фоновые сервисные процессы, такие как синхронизация, до тех пор, пока память браузера не уменьшится.

Службы могут дополнительно согласовать это поведение, запросив, чтобы они считались «передним планом». Это помещает службу в состояние «пожалуйста, не убивайте», но требует, чтобы она включала уведомление пользователя о том, что она активно работает, например, музыкальные проигрыватели, антивирус и т. д.

Приложение должно отображать уведомление, в вашем случае это системное приложение, ему не нужно это требование, оно может сообщить системе, что оно должно работать все время, и система не убьет его, только если системе требуется больше памяти. и это единственная служба, которая все еще работает (каковы шансы, что это произойдет).

Теперь вернемся к вашему вопросу. Будет ли это стоит того? Я думаю, это потому, что это пустая (действительно пустая) память используется и не будет освобождена без всякой цели.

Я добавлю :

ваш план остановить его широковещательный приемник может не поддерживать службу в фоновом режиме, я бы порекомендовал вам отключить приложение в разделе «Настройки»> «Приложение»> «Все» и нажать «Отключить» (если эта кнопка есть) или заморозить приложение с помощью резервного копирования титана.

Ссылка: http://android-developers.blogspot.com/2010/04/multitasking-android-way.html http://www.howtogeek.com/161225/htg-explains-how-android-manages-processes/ http ://developer.android.com/training/articles/memory.html

Вы всегда должны цитировать источник(и) и надлежащим образом указывать автора. Пожалуйста , следуйте разделу Как ссылаться на материалы , написанные другими . Может вы пропустили?
@Firelord Я не знаю, как сделать его точную копию, надеюсь, то, что я сделал, в порядке.
УХ ТЫ!!! Отличный ответ! Большое спасибо! Я так много узнал из твоего ответа. Спасибо! Просто чтобы узнать больше, будет ли отключение служб таким же успешным (или более успешным, чем) отключение приложения? См.: android.stackexchange.com/questions/129427/…
@RockPaperLizard проблема в этом вопросе - ошибка, отключенное приложение должно игнорироваться системой, оно не будет включено в установленные приложения, и диспетчер пакетов не должен перечислять его, если у вас есть кнопка отключения в настройках, нажмите ее и подтвердите, что вы готовы продолжить сложную работу, метод adb и метод отключения практически одинаковы, вы говорите менеджеру пакетов, что он должен игнорировать это приложение, как он делает с «приложением мастера установки», которое отключается после первая конфигурация, вы видите мастер установки где-нибудь после первой загрузки? никогда .
Спасибо. Я начну с отключения приложения. Обратите внимание, что отключить Службы так же просто, как отключить приложение при использовании MyAndroidTools: play.google.com/store/apps/details?id=cn.wq.myandroidtools .
Ясно, я думаю, что отключение всего приложения будет более безопасным и эффективным, но, как говорится, все дороги ведут в Рим, вам нужно выбрать путь.