Lmkd что это процесс android

Содержание
  1. Android Low Memory Killer Daemon
  2. Introduction
  3. Background
  4. Android Properties
  5. Русские Блоги
  6. Guardian в системе Android (3) — Сервис в основном классе: LMKD
  7. утверждение
  8. 0 написано перед
  9. 1 роль LMKD
  10. 2 Монитор LMKD с stroace
  11. 3 Рекомендовать содержание книги
  12. Русские Блоги
  13. Android низкий механизм памяти
  14. Русские Блоги
  15. Обзор новых функций системы Android P
  16. 1. Введение
  17. 2. План высоких частот
  18. Обновление системных свойств
  19. VNDK (Vendor NDK) — комплект разработчика
  20. 3. System
  21. 3.1 Улучшение производительности хранилища
  22. Файловая система
  23. 3.2 Kernel
  24. 3.3 Регулировка ЛМКД
  25. 3.4 F2FS
  26. 3.5 Производительность
  27. 4. Framework
  28. 4.1 AMS
  29. 4.2 PMS
  30. 4.3 WMS
  31. 4.4 Повышение выносливости
  32. 4.5 Машинное обучение
  33. 4.6 Location
  34. 5. Runtime
  35. 5.1 ART и libcore
  36. Интеллектуальная рекомендация
  37. Используйте шаблон состояния вместо if else
  38. Проектирование архитектуры: схема проектирования уровня балансировки нагрузки (5) — установка одного узла LVS
  39. Рыба образования, средняя школа закончила в учебном класс, как найти первую работу.
  40. Синглтон паттерн в питоне
  41. Java Counce Collection
  42. Вам также может понравиться
  43. динамический прокси-сервер jdk (Proxy, InvocationHandler), включая исходный код $ Proxy0
  44. Юля: Об изменениях в Array 1.0
  45. студия Android генерирует статическую библиотеку jni
  46. Nginx 502 раствор
  47. Java вызывает SMS-интерфейс WebService

Android Low Memory Killer Daemon

Introduction

Android Low Memory Killer Daemon (lmkd) is a process monitoring memory state of a running Android system and reacting to high memory pressure by killing the least essential process(es) to keep system performing at acceptable levels.

Background

Historically on Android systems memory monitoring and killing of non-essential processes was handled by a kernel lowmemorykiller driver. Since Linux Kernel 4.12 the lowmemorykiller driver has been removed and instead userspace lmkd daemon performs these tasks.

Android Properties

lmkd can be configured on a particular system using the following Android properties:

ro.config.low_ram: choose between low-memory vs high-performance device. Default = false.

ro.lmk.use_minfree_levels: use free memory and file cache thresholds for making decisions when to kill. This mode works the same way kernel lowmemorykiller driver used to work. Default = false

ro.lmk.low: min oom_adj score for processes eligible to be killed at low vmpressure level. Default = 1001 (disabled)

ro.lmk.medium: min oom_adj score for processes eligible to be killed at medium vmpressure level. Default = 800 (non-essential processes)

ro.lmk.critical: min oom_adj score for processes eligible to be killed at critical vmpressure level. Default = 0 (all processes)

ro.lmk.critical_upgrade: enables upgrade to critical level. Default = false

ro.lmk.upgrade_pressure: max mem_pressure at which level will be upgraded because system is swapping too much. Default = 100 (disabled)

ro.lmk.downgrade_pressure: min mem_pressure at which vmpressure event will be ignored because enough free memory is still available. Default = 100 (disabled)

ro.lmk.kill_heaviest_task: kill heaviest eligible task (best decision) vs. any eligible task (fast decision). Default = false

ro.lmk.kill_timeout_ms: duration in ms after a kill when no additional kill will be done. Default = 0 (disabled)

ro.lmk.debug: enable lmkd debug logs, Default = false

ro.lmk.swap_free_low_percentage: level of free swap as a percentage of the total swap space used as a threshold to consider the system as swap space starved. Default for low-RAM devices = 10, for high-end devices = 20

ro.lmk.thrashing_limit: number of workingset refaults as a percentage of the file-backed pagecache size used as a threshold to consider system thrashing its pagecache. Default for low-RAM devices = 30, for high-end devices = 100

ro.lmk.thrashing_limit_decay: thrashing threshold decay expressed as a percentage of the original threshold used to lower the threshold when system does not recover even after a kill. Default for low-RAM devices = 50, for high-end devices = 10

ro.lmk.psi_partial_stall_ms: partial PSI stall threshold in milliseconds for triggering low memory notification. Default for low-RAM devices = 200, for high-end devices = 70

ro.lmk.psi_complete_stall_ms: complete PSI stall threshold in milliseconds for triggering critical memory notification. Default = 700

lmkd will set the following Android properties according to current system configurations:

Источник

Русские Блоги

Guardian в системе Android (3) — Сервис в основном классе: LMKD

утверждение

  • На самом деле, в системе Android есть некоторые ключевые услуги демона;
  • Временно проанализировать их роль, которая помогает понять рабочий процесс всей системы;

0 написано перед

  • До тех пор, пока это операционная система, нельзя сказать, что есть уверены, что будут несколько демонов (демонов), чтобы завершить много грязной работы. Он также может рассматриваться через файл init.rc в системе, где каждая служба включена в процесс обслуживания фона системы.
  • Эти услуги делятся на: сервис Core Class (ADBD / ServiceManager / HealthdD / LMKD / LOGDD / Vold) и услуги основного класса;
  • Услуги по основным классам также разделены на: сетевые услуги (NetD / MDNSD / MTPD / RILD), Услуги графики и медиа-класса (MediaServer / dnnserver), Другие услуги класса (MediaServer / dnnserver), Другие услуги класса (INTORCTM)

1 роль LMKD

В системе Android есть демон основного класса в системе Android.

LMKD предоставляет интерфейс механизма LMK (низкого уровня памяти) в ядре, который уникален для Android. LMKD позволяет Android Advanced пользователи частично управлять механизмом управления MINUX (OOM) (когда физическая память недостаточна, убивая частичные процессы, смягчающие механизм давления памяти). LMKD может использовать файл / proc / pid / oom_score_adj, чтобы сделать их проще или легче погибли, когда система сталкивается с давлением памяти, регулируя соответствующий процесс.Механизм OOM Linux может относиться к главе 9 Android Beaching Drive Drive Analysication и трансплантация (Press University Tsinghua) — Низкий драйвер управления памятьюОтказ LMKD имеет два возможных режима работы, и какой режим введен специально, который определяется в зависимости от того, обнаруживается ли функция Android LMK:

  1. Если в ядре есть LMK, LMKD будет настроить только целевой процесс в оценке OOM в Pseudo Pile в / proc Pseudo, и система специально убьет систему, чтобы убить, какой процесс передан модулю LMK;
  2. Если в ядре нет LMK, LMKD также воспринимает ответственность на задачу, отвечающую на событие давления памяти, и, в частности, выполняет задачу процесса убийства (то есть отправлять сигнал SIGKILL в процесс убийства). LMKD будет поддерживать процесс хэш-таблица, чтобы быстро увидеть оценку OOM всех процессов.

Многие другие демоны в системе Android LMKD также используют Epoll_Wait, чтобы дождаться нескольких входных данных сокетов одновременно. Процесс в основном прослушивает / dev / socket / lmkd, который создается процессом init для LMKD. Этот розетки однозначно ожидают только для соединения AttiovalManervice, ActivityManagerservice с этим сокетом, чтобы уведомить LMKD, какой процесс должен настроить свой счет OOM (через класс процессора).

Когда LMK недоступен в ядре (т. Е. Когда файл / sys / модуль / lowmemorykiller не найден), lmkd дополнительно прослушивает файлы в / dev / memcg. Это cgroup, чтобы получить события давления памяти, весь процесс показан ниже:

Когда вы несете ответственность за обработку события давления памяти (т. Е. Без использования LMK в ядре), LMKD будет распределять файл / proc / zoneinfo, чтобы получить следующее значение:

  • Nr_free_pages: Общее количество простоя памяти (агрегат: 4 КБ)
  • Nr_file_pages: Файл-карта 1

I Общая память Общее количество памяти (Единица: 4 КБ)

  • NR_SHMEM: Общее количество общей памяти также является страницей памяти для нескольких процессов, поэтому она также должна быть вычтена из общего количества памяти, занятых файловым отображением.
  • NR_TOTALRESERG_PAGES: Общее количество заповещенных памяти, хотя эти страницы простаиваются, но они могут быть фактически использованы, поэтому они также должны быть вычтены из общего количества простоя памяти.
  • LMKD будет постоянно убивать выбранный процесс, пока общее количество простоя, не достигают требований или файлов назначения, могут быть сопоставлены на память.

    2 Монитор LMKD с stroace

    Используйте мощную вспышку.

    3 Рекомендовать содержание книги

    Есть книга «Android Blacesing Drive Drive Analysis и Transplantation» (Tsinghua University Press) (Университет Tsinghua Presess) (Tsinghua University Press) Глава 9 — Низкие драйверы по управлению памятью.

    Источник

    Русские Блоги

    Android низкий механизм памяти

    Опубликовано на моем блоге (prajna.top): http://prajna.top/doc/4/237 Добро пожаловать всех, чтобы общаться.

    Lowmemorykiller — это патч, играющий на уомкиллере на основе ядра Linux. Oomkiller ищет счет, чтобы убить, когда ядро ​​не может распределить память. Lowmemorykiller — это за шаг заранее, разделив оставшуюся внутреннюю память на разные уровни, существует процесс потребления, вызывает разные уровни, убивая соответствующий процесс приложения. Большое количество процессов приложений кэшированных приложений было убито перед запуском уомкиллера.

    Просто поговорите о Омкиллере первым.

    Мы посмотрим на информацию о запросе любого процесса (например, / proc / 1), вы увидите следующие три параметра:

    • Oom_score — это окончательная оценка процесса, тем выше оценка, тем легче он убит;
    • OOM_SCORE_ADJ — Диапазон: [- 1000, 1000], является ядром, используемым для настройки приоритетов процесса. Чем ниже значение, чем ниже окончательный OOM_SCORE.
    • Oom_adj — Диапазон: [- 16, 15] — это настроить приоритет процесса для пользователей. Чтобы облегчить конфигурацию пользователей, предоставьте параметр меньшего размера OOM_ADJ, тем выше число, тем выше приоритет, а -17 указывает, что процесс защищен и не убивает Oomkiller.

    Следовательно, после пользовательских наборов OOM_ADJ, ядро ​​преобразует и обновит фактическое значение OOM_SCORE_ADJ, а их конверсионные отношения:

    Как видно сверху, этот алгоритм поврежден, поэтому иногда он обнаружит, что значение чтения OOM_ADJ отличается. Например, установите OOMAJD = 13, затем OOM_SCORE_ADJ = 764, прочитайте OOM_ADJ, 764 * 17/1000 == 12 снова снова.

    Когда память исчерпана, уомкиллер позвонитout_of_memory()Приехатьselect_bad_process()Максимальное значение OOM_SCORE — это плохой процесс, который будет убит.oom_badness()В качестве основного значения OOM_SCORE_ADJ, в зависимости от того, занимается ли процессом администратора, ситуация с памятью занята, окончательное значение OOM_SCORE рассчитывается, тем выше оценка, тем легче она убита.

    Omkiller Соответствующий файл исходного кода:

    В системе Android, когда статус изменения приложений, таких как: создание, приема трансляции, просыпаться, поставить на фоновом режиме, AtificmanagerserviceupdateOomAdjLocked() встречаcomputeOomAdjLocked()Затем пройтиapplyOomAdjLocked()Напишите значение OOM_ADJ приложению к ядру Linux.

    Так как как рассчитать каждое приложение Final OOM_ADJ стоимость?

    Мы знаем, что диапазон OOM_ADJ [-16, 15], и A AN объявил различные категории, соответствующие разным значениям, в соответствии с характеристиками процесса приложений.

    15: Это кэшированное приложение к фону.

  • 8: Сервис B в списке, неиспользуемые процессы обслуживания в течение длительного времени.
  • 7: Предыдущее приложение.
  • 6: Home app。
  • 5: Содержит процесс приложения для обслуживания.
  • 4: Применение веса высокого уровня — Скрытые свойства, P или выше можно настроить: Android: Cantavestate = «True»
  • 3: Backup App — приложение резервное копирование.
  • 2: пользователь может воспринимать фоновый процесс, такой как: фоновый музыкальный проигрыватель.
  • 1: Некоторые видимые компоненты, которые начинаются на стойке регистрации, такие как: электронная почта, которая всплывает.
  • 0: приложение.
  • -11: persistent service -- android:persistent:=true
  • -12: Системные приложения резидентной памяти, такие как: приложение Dial-Up поставляется с системой.
  • -16: Системный процесс — такой как: System_Server.
  • -17: не затронут OOM_ADJ, этот процесс не будет убит и значение по умолчанию нативный процесс.
  • Lowmemorykiller зарегистрированshrinker— инструмент управления памятью для ядра для ядра, когда ядро ​​необходимо перерабатывать память, позвонит Lowmemorykillerlowmem_shrink()Он проверяет, сколько памяти остается в ядре, соответствует массиву Lowmem_minfree [] в соответствии с оставшимся количеством памяти, затем найдите значение индекса массива, затем используйте значение индекса, от Lowmem_adj [] Этот массив получают целевую цену OOM_ADJ, финал в Процесс больше или равен этой цели OOM_ADJ, убить процесс с максимальным значением OOM_ADJ —send_sig(SIGKILL, selected, 0) Отказ Алгоритм на самом деле очень прост, то есть два одномерных отображения массива.

    Такие, как: Оставшаяся память системы составляет 3 * 1024, она составляет менее 4 * 1024, соответствующий индекс массива составляет 2, Nowmem_adj [2] соответствует 6, то система найдет наибольшее в процессе OOM_ADJ> = 6 процессов OOM_ADJ, затем убить его выпускания памяти.

    Android инициализируется, пройдет процесс процессора ::updateOomLevels()Чтобы установить начальное значение вышеуказанных двух массивов, мы можем настроить Lowmem_minfree [] через Framework’s Config.xml, или / sys файловой интерфейс.

    CONFIG _. KBYTESABSOLUTE: не-1 — абсолютный, использует следующий алгоритм для получения фактического значения массива.

    Config _. kbytesadjust: non 0, непосредственно при каждом значении массива + = review_adj;

    Такие как: — 512 , указывая на то, что каждое значение массива уменьшается на 512.

    Lowmem_adj [] можно регулировать интерфейс файловой системы / sys.

    Конечно, в реальном процессе разработки вы также можете исправить непосредственно в этой функции или прочитать свойства системы, настраивать через свойства и многое другое. Как и раствор MSTar, два свойства определены для выполнения сторонних конфигураций: ro.mstar.lmkd.minfreeиro.mstar.lmkd.adj

    Здесь в основном превышается низкомеморкиллер, и, наконец, как ценность OOM_ADJ к ядру.

    An Via PlaceList:setOomAdj()С розеткой с LMKD Communication LMKD проходит значение OOM_ADJ на Linuxkernel с интерфейсом файловой системы / sys.

    Соответствующий файл исходного кода:

    Система / Core / LMKD / Генерация / Система / BIN / LMKD
    drivers/staging/android/lowmemorykiller.c
    framework/base/. /server/am/

    Источник

    Русские Блоги

    Обзор новых функций системы Android P

    1. Введение

    8 марта 2018 года Google выпустила предварительную версию Android P. Первоначально кажется, что эта большая версия не изменилась. Далее изменения Android P будут интерпретироваться с учетом аспектов системы Treble, System, Framework, Runtime, Security и так далее.

    2. План высоких частот

    План Treble является очень важным изменением и оказывает большое влияние на системный уровень. Каждый раз, когда Google выпускает большую версию Android, процесс адаптации к производителю и приложению представляет собой длительный процесс. Каждый раз, когда основная версия работы по адаптации трудна, производитель может лучше понять различные проблемы совместимости. Поскольку Android O был выпущен в прошлом году, текущая модель Android O имеет относительно небольшое количество пользователей, и приложение не смогло быстро принять меры по адаптации targetSdk к O. Android P. скоро появится. Фрагментация системы Android всегда была болезненной точкой. Суть плана заключается в том, чтобы отделить систему от аппаратного обеспечения и ускорить обновление системы. Treble начался с Android O и был улучшен до Android P.

    Далее, посмотрите на положение Treble во всей системе Android:

    Различные уровни на рисунке:

    1. Продукт: OEM-настройки, в основном, включая приложения, системные выпуски и т. Д.
    2. Система: Framework и Daemons системы Android и др.
    3. Высокий интерфейс: Высокий интерфейс
    4. Поставщик: аппаратное обеспечение
    5. ODM: настройка, связанная с ODM, например поддержка VINTF

    Самый промежуточный компонент Treble Interface, интерфейс добавлен в Android O: C ++ зависимый (с использованием VNDK), IPC-вызов (с использованием HIDL), SELinux, общий интерфейс ядра, Android Verified Boot (AVB), новый интерфейс для Android P: Java зависимый (Использование System SDK), Свойства системы. Из рисунка видно, что план Treble состоит в том, чтобы надеяться, что основной поставщик использует старую версию, а также может поддерживать системный уровень для обновления до новой версии, тем самым обеспечивая быстрое обновление основной версии Android.

    Обновление системных свойств

    Здесь следует отметить, что совместимость системных свойств очень плоха для Treble, так как обеспечивает межпроцессное взаимодействие между платформой и поставщиком по нестабильному каналу, что противоречит разделению и разъединению Treble. Для этого Treble планирует отделить Недвижимость от Платформы до Продавца. Процессы платформы могут получить доступ только к свойствам платформы, а процессы поставщика могут получить доступ только к свойствам поставщика.Конечно, это также позволяет свойствам платформы быть доступными для процессов поставщика.

    1. Все предоставляемые свойства платформы находятся в system / sepolicy / public / property_contexts, поставщик не может получить доступ к другим свойствам платформы
    2. Все свойства, доступные для скриптов Vendor Init, находятся в system / core / init / stable_properties.h, скрипты Vendor Init не могут использовать другие свойства платформы в качестве триггеров действий.
    3. Атрибуты поставщика должны иметь свое собственное пространство имен, например «vendor.», «Ro.vendor.», «Persist.vendor.» И т. Д.
    4. Vendor Init использует доменное имя vendor_init, чтобы гарантировать, что используются только разрешения, относящиеся к поставщику, а системные атрибуты недоступны

    VNDK (Vendor NDK) — комплект разработчика

    VINTF (Vendor Interface) разделен на две части: аппаратно-независимый (Framework) и аппаратный (Hal). Чтобы еще больше стандартизировать архитектуру системы, CKI (Common Kernel Interface) определяется как набор интерфейсов ядра, на которые должен опираться общий образ системы, и ветвь ядра также была эффективно оптимизирована. VTS проверит надежность HAL, Kernel и VNDK, а CTS протестирует общие системные интерфейсы и функции инфраструктуры. Начиная с Android O это стало обязательным, и CTS / VTS обеспечит гарантию адаптации развязки системы.

    В контексте Treble Vendor относится к уровню HAL и периферийным устройствам системы на кристалле, а программное обеспечение, которое не зависит от аппаратного обеспечения, не является частью Vendor.
    , а VNDK ссылается на системную библиотеку, предоставленную Поставщиком для реализации уровня HAL.

    • Конструкция Платформы и Продавца изолирована друг от друга.
    • Платформа lib соответствует system.img.
    • Поставщик lib соответствует vendor.img.
    • В большинстве случаев Vendor lib и ядро ​​системы не могут использоваться друг с другом, Vendor lib не позволяет создавать частные системные библиотеки
    • Партнерам не разрешается добавлять lib в VNDK для своих продуктов, они могут только вносить вклад в AOSP

    Все это для разделения между системной библиотекой и библиотекой Vendor. Если это решение будет принято на Android P, будет обновлена ​​следующая основная версия Android Q. Вы можете напрямую добавить новую System Q к старому Vendor P, чтобы сформировать новую версию Android ,

    Android P недавно добавленное пространство имен:

    • Системное пространство имен / system / lib /;
    • Пространства имен поставщиков: / system / lib / vndk, / system / lib / vndk-sp, / vendor / lib / vndk, / vendor / lib / vndk-sp

    3. System

    3.1 Улучшение производительности хранилища

    FDE используется для Android 6.0, FBE используется для Android 7.0, и будут созданы два каталога, DE и CE, чтобы обеспечить лучший пользовательский опыт и конфиденциальность. Скоро FDE будет полностью удален, кроме того, в будущем появятся более быстрые алгоритмы шифрования.

    Файловая система

    Начиная с Android 8.0 поддерживаются квоты файловой системы, и три основные цели:

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

    Справедливая стратегия кэширования:

    1. Выделите квоту кэша для каждого приложения (в зависимости от того, как часто они его используют) и удаляйте самый старый кэшированный файл, пока не будет достаточно свободного места.
    2. Рекомендация: регулярно вызывайте новые методы, чтобы убедиться, что система имеет возможность удалять кэшированные файлы. Вы можете использовать PackageInstaller, DownloadManager и DocumentsUI, чтобы ограничить злоупотребление приложениями.
    3. Устройство должно удалить вредоносные приложения или удалить большие файлы.
    4. Избегайте застревания устройства в процессе циклического перезапуска.
    5. Запретить приложениям использовать block90% или inodes50%.
    6. exFAT: у Google нет ресурсов для поддержки связанных обновлений, только частичные исправления.
    7. vold: метод связи с fw изменен от метода сокета к связующему для повышения производительности, это еще одно изменение от модуля сокета до связующего после установщика.
    8. TRIM: этот процесс запускает операцию G2 f2fs и запланирован к выполнению ночью во время простоя.
    9. FUSE: он был удален. С sdcardfs esdfs будет использоваться для дальнейшей оптимизации.
    10. Более быстрое копирование файлов: FileUtils.copy на 35

    50% быстрее, чем пользовательское пространство.

  • FDE, FUSE, ASECs удаляются.
  • 3.2 Kernel

    • Функции домена Framework будут зависеть от Ядра 3.18 или новее, и 3.10 больше не будет поддерживаться. Кроме того, ядро ​​4.14 было перенесено в AOSP.
    • ION: libion ​​поддерживает новый интерфейс Kernel ION на Android P. Настоятельно рекомендуется использовать libion ​​вместо прямого использования ion ioctl.
    • kernel + clang: Настоятельно рекомендуется использовать clang 5.0 или более поздней версии. Сообщение об ошибке обеспечивает точное позиционирование, занимает память и быстро компилируется, а gcc имеет определенные исторические проблемы.
    • sdcardfs: файловая система Android O по умолчанию (ro.sys.sdcardfs = 1). Файловой системой Android O по умолчанию является sdcardfs, но она может закрываться и возвращаться к FUSE. Android P планирует удалить FUSE напрямую, и скоро будет обновлена ​​версия sdcardfs. Для файловых систем, даже если sdcardfs не используется, настоятельно рекомендуется использовать файловую систему на основе ядра вместо пространства пользователя.

    3.3 Регулировка ЛМКД

    Недостатки ядра на основе LMK:
    • Положитесь на жестко запрограммированный оставшийся предел памяти вместо того, чтобы регулировать на основе ограничений памяти;
    • Производители получают больше настроек, что означает, что оригинальный дизайн более жесткий, он не подходит для добавления настроек политики, и процесс не прерывается группой;
    • Вставляя заглушки в API для сжатия слябов, Shrinkers должны были быстро удалить кэши и выйти, чтобы избежать замедления процесса сканирования памяти. Но на самом деле рабочая нагрузка, выполняемая LMK, включает в себя поиск целевых процессов и их уничтожение. Этот процесс не является быстрым действием
      Можно убить важные процессы, но не важные процессы не уничтожены
    • LMK будет удален из ядра 4.12;
    Альтернатива: пользовательский режим LMKD + память cgroups
    • Он может создавать более интеллектуальные группы памяти, основанные на давлении памяти, стратегии, основанные на давлении, событиях давления памяти, функциях учета памяти, дополнительные элементы управления, такие как релевантность и перестановка, могут быть более удобными для записи журналов и треков;
    • Сложность этого решения: каждому приложению необходим учет памяти, для уничтожения групп процессов требуется время, а стоимость передачи задач между cgroups относительно высока;
    • Соответствующее решение: последнее ядро ​​уменьшило накладные расходы памяти, время запуска приложения увеличилось на 3% и неэффективно в нескольких небольших очередях LRU;
    • Проблема трудоемкой группы процессов уничтожения путем перемещения процесса уничтожения из блокировки AMS;
    • Группа процессов убийства LMKD доверена ActivityManager;
    Пользовательский режим LMKD стратегия:
    • Используйте свойство ro.config.low_ram для разделения устройств с низкой памятью и высокопроизводительных устройств
      • Устройства с малым объемом памяти: умеренное давление памяти является более распространенным. Процесс уничтожения в основном предназначен для средних и критических условий давления памяти. Настройте oom_adj_score. Давление памяти основано на использовании подкачки. Стратегия процесса убийства будет отложена, пытаясь сохранить сервис в рабочем состоянии.
      • Высокопроизводительные устройства: расставьте приоритеты производительности и оставьте как можно больше памяти, чтобы оптимизировать работу пользователя. Стратегия уничтожения будет усовершенствована, убивая несколько процессов одновременно, чтобы гарантировать, что память находится под низким давлением, и более агрессивно высвобождая память, чтобы держать систему под низким давлением памяти.
    будущее
    • Улучшите стратегию процесса убийства, основываясь на входных сигналах (доступная память, размер задачи, значение давления в памяти, частота событий давления в памяти).
    • Комбинируйте стратегии процесса убийства, чтобы обеспечить больше механизмов контроля.
    • Изучите время убийства и потенциальную нагрузку на память.
    • Работает с cgroups v2.

    3.4 F2FS

    sdcardfs и fuse — это один уровень вещей. sdcardfs имеет лучшую производительность, чем fuse. Для работы с одним и тем же файлом fuse должен пройти 6 переключений режима пользователя и режима ядра, в то время как sdcardfs требуется только дважды.

    (F2FS, Flash-Friendly File System) Важные функции файловой системы:

    1. Фоновая очистка: когда файловая система фрагментируется более сильно, скорость чтения и записи уменьшается, и запускается фоновый поток антифрагментации для очистки фрагментов файла;
    2. Асинхронное отбрасывание: выброшенное пространство хранения файловой системы сброса необходимо для уменьшения чрезмерного GC флэш-памяти. Когда синхронное отбрасывание имеет относительно большую задержку для пользователей, применяется асинхронное отбрасывание;
    3. Атомная запись: SQLite является базой данных по умолчанию для Android, и безопасность данных гарантируется путем управления файлами журналов, что принесет много избыточных операций записи и синхронизации, а атомарная запись может эффективно уменьшить файлы журналов;

    По сравнению с ext4, в F2FS значительно улучшены последовательная запись файлов, случайная запись и SQLite. Google продолжит регулировать производительность и стабильность F2FS.

    3.5 Производительность

    Разделение блокировки Binder на более мелкозернистые блокировки на Android O действительно решает проблему конкуренции блокировки Binder.

    • Код драйвера ядра может использовать планировщик RT при необходимости, чтобы избежать отключения вытеснения на длительное время в драйвере
    • Предложить
      • Если возможно, используйте mem cgroups
      • файловая система userdata, рекомендуется f2fs
      • Закройте ненужные элементы конфигурации ядра
      • Удалить ненужные журналы
      • В раннем ядре рекомендуется включать KSM для устройств с малым объемом памяти и не использовать KSM в более поздних версиях.

    Android P уделяет больше внимания тому, как повысить энергопотребление при той же производительности. EAS — это общий алгоритм планирования ЦП, основанный на модели энергопотребления и данных о производительности, а не метод настройки. Почему Android использует алгоритм планирования EAS? Требуется стандартный планировщик, который сочетает в себе энергопотребление и производительность, а стратегию планирования можно скорректировать с помощью Framework. Здесь необходимо учитывать балансировку нагрузки на ресурсы, размерные ядра, cpufreq, регулятор, уменьшить использование больших ядер и сбалансировать энергопотребление.

    4. Framework

    4.1 AMS

    Начиная с Android P, только когда FLAG_ACTIVITY_NEW_TASK указан в Intent-Flag, разрешено запускать Activity в сценариях без активности. Приложение должно иметь разрешение FOREGROUND_SERVICE, чтобы разрешить использование служб переднего плана, в противном случае будет сгенерировано исключение.

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

    • Ограничения фоновой службы (фоновой службы)
      • Когда процесс находится в фоновом режиме в течение 1 минуты, он переходит в состояние простоя, и система останавливает свои фоновые службы, что означает, что приложение должно завершить завершающую работу в течение 1 минуты в фоновом режиме. Не разрешается осуществлять мониторинг системы в течение длительного времени в фоновом режиме, что экономит энергопотребление; для приложений Фон не позволяет пользователям воспринимать операции, официальная рекомендация — использовать JobScheduler.
      • Фоновому процессу не разрешено запускать службу через startService, в противном случае IllegalStateException будет выброшено, когда targetSdk> = 26.
      • Служба Foreground (Foreground Service) не имеет этого ограничения, потому что служба Foreground будет висеть, уведомление переднего плана будет видимым для пользователя. Android O добавляет startForegroundService (), который используется для запуска службы переднего плана, но есть ограничение, что приложение должно вызывать startForeground () в течение 5 секунд после запуска службы, в противном случае будет выброшено ANR
    • Ограничения на трансляцию:
      • Приложение не может использовать большинство неявных трансляций, зарегистрированных в своем манифесте, но допускаются некоторые неявные трансляции, такие как BOOT_COMPLETED, LOCALE_CHANGED и т. Д. Это позволяет экономить электроэнергию и производительность, а также предотвращать подъем большого количества приложений при прослушивании различных трансляций.
      • Явные трансляции, зарегистрированные в списке, и неявные трансляции, зарегистрированные динамически, все еще работают.

    4.2 PMS

    Рефакторинг PackageManger для уменьшения сложности кода основных сервисов, перемещения кода, такого как разрешение и намерение, в отдельный класс и перемещения несвязанного кода, такого как управление пользователями, dex, ярлыки и т. Д., В подпакеты, максимально возможное использование локальных данных во избежание блокировки; В то же время увеличить юнит-тестирование.

    Основным изменением PMS в Android O является оптимизация времени запуска и максимально возможное параллельное выполнение операции. Основным изменением в Android P является процесс сканирования scanPackageOnly (), следующим шагом является извлечение большего количества подкомпонентов и классов, таких как разрешение по намерениям, проверка пакетов, dexopt и т. д., чтобы сократить метод модификации членов объекта.

    4.3 WMS

    В Android O объектная модель структурированного окна и иерархия контейнеров улучшают покрытие CTS и вводят модульные тесты, а SurfaceFlinger представляет иерархию для снимков SurfaceView и Task. На Android P продолжайте улучшать создание объектных моделей, синхронизацию APP Transitions, инструменты WindowScope.

    Чрезмерное использование идентификатора стека, стек управляет аналогичными задачами и действиями.Определенные режимы окна, такие как HOME_STACK_ID, FULLSCREEN_STACK_ID, FREEFORM_STACK_ID, приводят к тому, что одна и та же задача стека и действие не имеют разных режимов окна. Новая схема допускает использование нескольких оконных контейнеров, и режим окна больше не ограничен идентификатором стека.

    С синхронными переходами APP процесс анимации больше не требует блокировок WMS. Кроме того, инструменты Transitions и WindowScope похожи на systrace, которые можно использовать для удобного просмотра WindowManager и SurfaceFlinger, они включены только в версии отладки пользователя и мало влияют на производительность.

    4.4 Повышение выносливости

    Ранее, с точки зрения времени работы от батареи, были такие функции, как JobScheduler, ограничение неявной широковещательной передачи Doze, ограничение фонового обслуживания и местоположения, освобождение тайника блокировки кэша и т. Д. У Google не было комплексной стратегии энергопотребления. Различные OEM-производители часто имеют разные стратегии энергопотребления. Потребление, такое как приложение Force stop, действие / служба уничтожения и т. Д. На этот раз Android P также находится в центре внимания с точки зрения энергопотребления. Google планирует использовать машинное обучение на Android P, чтобы прогнозировать привычки пользователей для оптимизации энергопотребления. Таким образом, приложение разделено на четыре категории: активные, рабочие_установки, частые и редкие.Приложения, разделенные на разные группы, применяют ограничения на задания, тревоги, сеть и FCM.

    В настоящее время многие приложения вешают fg-сервис, чтобы выжить в фоновом режиме.На самом деле, Google, включая производителей, настоятельно рекомендует разработчикам не использовать его таким образом и должен быть максимально ограничен, если они используются в необходимых сценариях, таких как фоновая навигация и воспроизведение фоновой музыки. Вот почему fg-service должен отображать уведомления, чтобы пользователи знали о поведении приложения. Для тех, кто не должен находиться в фоновом режиме, они по-прежнему вешают уведомление на переднем плане, тогда пользователь может активно убить его или даже удалить.

    4.5 Машинное обучение

    Внедрить API нейронной сети в Android O, обеспечить встроенное машинное обучение Android, а также расширить и улучшить TensorFlow в Android P.

    В Android P ИИ используется для прогнозирования поведения пользователя для более разумной стратегии энергосбережения, в интерфейсе поиска UI также используется машинное обучение. ИИ постепенно укрепляет систему Android.

    Приложение Dynamic App должно поддерживаться магазином приложений. Файлы ресурсов, конфигурация, язык и информация о внутреннем формате версии приложения могут использовать Dynamic App для уменьшения размера APK.

    Автозаполнение: платформа, плагин, приложение, браузер, полный набор решений для автоматического заполнения фреймворка.

    4.6 Location

    Телефон опыт Улучшая пользовательский опыт совершения звонков, расширяя API для поддержки одновременных телефонных звонков из разных приложений, Telecom может отслеживать все активные звонки, но фокус может получить только одно приложение. Кроме того, для настройки трансляции изменений состояния SIM-карты SIM_STATE_CHANGED изменяется на SIM_CARD_STATE_CHANGED и SIM_APPLICATION_STATE_CHANGED. TelephonyManager также был настроен синхронно.

    Обнаружение активностиФункция обнаружения активности объединяет датчики и звуковые данные для определения ходьбы, бега, езды на велосипеде, вождения, подъема и спуска по лестнице и даже для определения того, находится ли пользователь в автомобиле, метро, ​​поезде или мотоцикле, а также может распознавать спящий режим при обнаружении AR. Находясь в режиме вождения, отключите уведомления, чтобы не мешать водителям. Предоставляет системе API для переходов состояний активности пользователя.

    Внутренняя навигация Невозможно добиться точного позиционирования WIFI внутри помещения. Система Android P поддерживает протокол IEEE 802.11mc WiFi. Предусматривается функция навигации внутри помещения. Приложения могут использовать позиционирование внутри помещения для обеспечения удобства позиционирования.

    CHRE Оптимизация энергопотребления означает, что AP нужно пробуждать как можно меньше, например, режим Doze и режим ограничения фонового позиционирования. Определите среду выполнения Context Hub, CPU в этой среде не разрешается запускать Java / Linux напрямую, только для выполнения специальных функций. Context Hub Service реализован в Android P, который проще в использовании. Контроль может иметь всегда включенный режим с низким энергопотреблением.

    5. Runtime

    5.1 ART и libcore

    Во время установки, обновления и OTA, ART необходимо извлечь сжатый dex из APK и проверить его, что тратит пространство и время процессора. С этой целью решение заключается в использовании несжатых файлов dex, и хранилище проверит их на Java и использует результаты проверки непосредственно во время процесса установки. Для файлов dex принят новый компактный формат, сокращающий использование памяти и места для хранения, более интеллектуальная оптимизация макета и меньшее чтение флэш-памяти.

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

    Обратные трассировки используют для отображения контекст Java, устраняя необходимость использовать addr2line для преобразования процесса, легко отлаживая и анализируя проблему.

    Поскольку Kotlin является официальным официальным языком Android, его производительность не будет ниже, чем у Java.

    Profiles in the Cloud Начиная с Android N для компиляции в режиме профиля, это выгодно для пространства хранения, памяти, энергопотребления и загрузки процессоров, но в настоящее время профиль является только локальным методом, и вам все еще нужно дождаться получения профиля, прежде чем отдавать приоритет. В будущем профиль пользователя будет собран и загружен в облако (Google play). Во время установки профиль будет получен из облака и использован непосредственно новым пользователем. Это может улучшить производительность холодного запуска примерно на 20%.

    core lib Обновите код libcore до OpenJDK 9. Стратегия устаревания приложения, Android добавит минимальную поддерживаемую версию, когда targetVersionSdk

    Интеллектуальная рекомендация

    Используйте шаблон состояния вместо if else

    Большинство разработчиков все еще используютif elseСтруктура процесса, виделиjdonизbanqСтатья написана Большим Братом, используяcommand,aopЗамена шаблонаif elseСтруктура процесса. Я не совсем понял эт.

    Проектирование архитектуры: схема проектирования уровня балансировки нагрузки (5) — установка одного узла LVS

    1 Обзор Предыдущая статья «Проектирование архитектуры: проектирование уровня балансировки нагрузки (4) — Принципы LVS» (http://blog.csdn.net/yinwenjie/article/details/46845997), мы предста.

    Рыба образования, средняя школа закончила в учебном класс, как найти первую работу.

    Self-брат Я девять ноль, теперь занимается разработкой веб-конца Java. Некоторое понимание и восприятие учебных курсов. Учебное заведение является ямой, дорога, что вы уже прошли, только вы знаете, дл.

    Синглтон паттерн в питоне

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

    Java Counce Collection

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

    Вам также может понравиться

    динамический прокси-сервер jdk (Proxy, InvocationHandler), включая исходный код $ Proxy0

    1. Связанные классы и методы: java.lang.reflect.Proxy, Прокси предоставляет статические методы для создания динамических прокси-классов и экземпляров. newProxyInstance() Возвращает экземпляр прокси-кл.

    Юля: Об изменениях в Array 1.0

    Версии до 1.0, например 0.2-0.6, Но теперь 1.0 это сообщит об ошибке. Это использование претерпело серьезные изменения! такие как: Это можно считать серьезным изменением.

    студия Android генерирует статическую библиотеку jni

    Android Сяобай, который только что вошел в общество, описывает, как использовать студию Android для создания статической библиотеки jni. 1. Подготовка: Сначала установите ndk, сначала сами Baidu, позж.

    Nginx 502 раствор

    Общие решения Nginx 502 Bad Gateway следующие: Nginx 502 Ошибка 1: Количество сайтов велико, а количество PHP-CGI мало. Для этой 502 ошибки просто увеличивайте количество процессов PHP-CGI. В частност.

    Java вызывает SMS-интерфейс WebService

    1. Описание интерфейса WebService Отправьте в виде http-сообщения, выше — информация о запросе, а ниже — возвращаемое значение. Представлен раздел возвращаемого значения документа интерфейса. 2. Код J.

    Источник

    Читайте также:  Создать фрагмент android studio
    Оцените статью