Intereting Posts
Не удается найти фрагмент по тегу Android-Как реализовать горизонтальную шаговую панель прогресса Настройка цвета стрелки «назад» в Actionmode с помощью appcompat-v7 Проблема ext4 / fsync неясна в Android (Java) Преобразование из Editable в int в android Android: плотность устройства возвращается с нуля на некоторых устройствах Как создать прозрачную активность на Android? Выполнение действия после анимации транзакции фрагмента завершено Как получать уведомления при изменении активности (приложения) на переднем плане MPAndroidChart, как установить минимальное и максимальное значение оси y или установить масштаб по умолчанию? Как использовать цветные образцы для Android Заполняя круг постепенно от нижнего к верхнему андроиду Как использовать дизайн материалов в приложении для Android? Android Selector Drawable с VectorDrawables srcCompat Невозможно выполнить это действие после onSaveInstanceState (предпочтение onClick)

На Android, какая разница между запущенными процессами и кэшированными фоновыми процессами?

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

Итак, что такое «кэшированные фоновые процессы»? Они все еще находятся в памяти, а не переключаются на «диск» (как это делают настольные компьютеры / ноутбуки), правильно? Когда пользователь вставляет один из этих «кешированных фоновых процессов», он будет отображаться сразу же, поскольку он все еще находится в памяти, точно так же, как работает процесс, правильно?

Что делает Android, когда он «кэширует» приложение?

Solutions Collecting From Web of "На Android, какая разница между запущенными процессами и кэшированными фоновыми процессами?"

Итак, что такое «кэшированные фоновые процессы»?

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

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

Выдающимся примером «кэшированного фонового процесса» будет тот, в котором пользователь запустил приложение, коротко щелкнул его, а затем нажал HOME, чтобы вернуться на главный экран. Если у процесса нет работающего сервиса, я ожидаю, что он будет указан как «кэшированный фоновый процесс».

Они все еще находятся в памяти, а не переключаются на «диск» (как это делают настольные компьютеры / ноутбуки), правильно?

Верный. Устройства Android не используют пространство подкачки.

Почему бы не посмотреть в исходный код приложения «Настройка» .

В моем Nexus 4 «Настройка» -> «Приложение» -> «Запуск» выглядит следующим образом.

Введите описание изображения здесьВведите описание изображения здесь

Прежде чем начать работу, в иерархии важности в Android Process есть пять уровней. Эти

1) Процесс переднего плана,
2) Видимый процесс,
3) Сервисный процесс,
4) Фоновый процесс,
5) Пустой процесс

Более подробную информацию вы можете найти в документе «Процессы и потоки» на сайте разработчика Android .

Я просмотрел код, и оказалось, что «SHOW CACHED PROCESSES» показывает те процессы , иерархия важности которых равна или ниже, чем «Фоновый процесс» . С другой стороны, «SHOW RUNNING SERVICES» показывает те, чья иерархия важности равна «видимый процесс» или выше . Я бросил некоторые детали, чтобы четко показать основную точку. Здесь вы можете увидеть полный исходный код этой части.

try { final int numProc = mAllProcessItems.size(); int[] pids = new int[numProc]; for (int i=0; i<numProc; i++) { pids[i] = mAllProcessItems.get(i).mPid; } ... for (int i=0; i<pids.length; i++) { ProcessItem proc = mAllProcessItems.get(i); changed |= proc.updateSize(context, pss[i], mSequence); if (proc.mCurSeq == mSequence) { serviceProcessMemory += proc.mSize; } else if (proc.mRunningProcessInfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) { backgroundProcessMemory += proc.mSize; MergedItem mergedItem; if (newBackgroundItems != null) { mergedItem = proc.mMergedItem = new MergedItem(proc.mUserId); proc.mMergedItem.mProcess = proc; diffUsers |= mergedItem.mUserId != mMyUserId; newBackgroundItems.add(mergedItem); } else { ... } ... } else if (proc.mRunningProcessInfo.importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE) { foregroundProcessMemory += proc.mSize; } } } catch (RemoteException e) { } 

Итак, вернемся к вашему вопросу,

Они все еще находятся в памяти, а не переключаются на «диск» (как это делают настольные компьютеры / ноутбуки), правильно?

Да, они все еще в памяти , но в конечном итоге системе Android может потребоваться удалить старые процессы для восстановления памяти для новых или более важных процессов. Чтобы определить, какие процессы сохранить и что убить, система помещает каждый процесс в «иерархию важности».

Когда пользователь вставляет один из этих «кешированных фоновых процессов», он будет отображаться сразу же, поскольку он все еще находится в памяти, точно так же, как работает процесс, правильно?

Верно . Например, единственной причиной сохранения «пустого процесса» является улучшение времени запуска в следующий раз, когда компонент должен запускаться в нем.

Что делает Android, когда он «кэширует» приложение?

AFAIK, он просто не убивает процесс и не позволяет ресурсам немедленно отвечать на Пользователь, когда он возвращается.

Ранжирование процесса

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

Это когда ранжирование процесса входит в картину; Процессы Android оцениваются в следующих категориях: от более высокого приоритета до более низких приоритетов:

  • Процесс переднего плана: это процесс, в котором размещается действие или служба, с которыми пользователь взаимодействует: служба, запущенная на переднем плане или служба, выполняющая обратные вызовы жизненного цикла
  • Видимый процесс : это процесс, в котором размещена приостановленная деятельность или служба, ограниченная видимой деятельностью
  • Сервисный процесс: это процесс, который содержит службу, не связанную с видимой деятельностью
  • Фоновый процесс : это процесс, который содержит невидимую активность; Все фоновые процессы сортируются по списку наименее используемого (LRU), поэтому наиболее последними используемыми процессами являются последние убитые процессы, когда они
  • Пустой процесс : это процесс, используемый для кэширования неактивных компонентов Android и для улучшения времени запуска компонента

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

Источник :

Асинхронное программирование на Android – второе издание – Хелдер Васконселос – июль 2016 года