Снижение использования оперативной памяти
Документация разработчика Android предполагает, что это может быть целесообразным для снижения использования оперативной памяти службы.
С Управление памятью вашего приложения: использовать несколько процессов :
Примером использования нескольких процессов может служить создание музыкального проигрывателя, который воспроизводит музыку из службы в течение длительного периода времени. Если все приложение выполняется в одном процессе, то многие из выделений, выполняемых для его пользовательского интерфейса активности, должны храниться в течение всего времени воспроизведения музыки, даже если пользователь в настоящее время находится в другом приложении, а служба контролирует воспроизведение. Такое приложение можно разделить на два процесса: один для его пользовательского интерфейса, а другой для работы, которая продолжает выполняться в фоновом режиме.
Таким образом, запуск службы в отдельном процессе может, следовательно, снизить влияние приложения на производительность, а также снизить вероятность того, что служба будет убита, когда в системе недостаточно ОЗУ.
Пониженное влияние на производительность
С Управление памятью вашего приложения: переключение приложений :
Если в вашем приложении есть кэшированный процесс, и оно сохраняет память, которая ему в данный момент не нужна, то ваше приложение, даже если пользователь его не использует, ограничивает общую производительность системы. Таким образом, поскольку системе не хватает памяти, она может уничтожить процессы в кеше LRU, начиная с процесса, который использовался не так давно, но также учитывая, какие процессы наиболее интенсивно используют память.
Уменьшенная вероятность быть убитым
С Управление памятью вашего приложения: освобождайте память по мере заполнения памяти :
Примечание: Когда система начинает уничтожать процессы в кеше LRU, хотя она в основном работает снизу вверх, она действительно учитывает, какие процессы потребляют больше памяти, и, таким образом, предоставят системе больше памяти получить, если убит. Таким образом, чем меньше памяти вы используете в общем списке LRU, тем больше у вас шансов остаться в списке и быстро возобновить работу.
Таким образом, ваш сервис с меньшей вероятностью будет убит, если он находится в отдельном процессе, поскольку использование оперативной памяти процесса будет меньше, поскольку сервис не использует ресурсы пользовательского интерфейса.
Когда это сделать
Если ваша служба не использует startForeground()
, я обнаружил, что Android просто убьет ее, когда потребуется освободить ОЗУ, поэтому потребление ОЗУ службы не так уж важно. Так что, если вы просто рассматриваете влияние на производительность ОС и других приложений, я не думаю, что стоит запускать службу в отдельном процессе.
Однако, если вы делаете , используете startForeground()
, Android будет стараться поддерживать ваш сервис в максимально возможной степени, поэтому любая ОЗУ, используемая процессом , будет влиять на ОС и Другие приложения. Поэтому в этом случае я рекомендую использовать отдельный процесс, который может сэкономить не менее 10 МБ ОЗУ, чтобы не замедлять работу устройств пользователей.
Также обратите внимание, что сделать ваше приложение многопроцессорным не просто; Android SharedPreferences
не поддерживает несколько процессов. Я сделал многопроцессную SharedPreferences
реализацию в одном из моих проектов , но я еще не опубликовал ее для повторного использования.