Как установить приоритет программы в андроид

Обновлено: 04.07.2024

Приоритет процесса приложения для платформы Android

Мы все знаем, что на телефоны Android можно установить множество приложений, и в каждом приложении есть хотя бы один процесс. Создание процесса - это хлопотная и ресурсоемкая вещь. Чтобы ускорить запуск приложения, Android будет кэшировать процесс приложения, которое временно не используется, но память ограничена, поэтому невозможно разместить все процессы. В памяти, так что Android имеет механизм исключения, он устанавливает приоритет процесса (oom_adj) в соответствии с состоянием приложения, а затем уничтожает процессы с низким приоритетом (большой oom_adj) в соответствии с плотностью памяти. Чтобы гарантировать, что другие процессы могут иметь достаточное использование памяти.

обработать

  1. Зиготный процесс
    Это основной процесс платформы Android. Все процессы приложения и процесс системного обслуживания SystemServer разветвляются процессом Zygote.
  2. Основной процесс приложения
    Каждое приложение запускается в отдельном процессе, имя процесса - имя пакета приложения. Эти процессы являются вилами процесса Zygote и управляются AMS (ActivityManagerService).
  3. Вспомогательный процесс приложения
    позволяет приложению иметь несколько процессов. Настройте атрибут android: process в AndroidManifest.xml для запуска нескольких процессов. Имена этих процессов - packagename: name, чтобы различать, принадлежат ли они Какое приложение я обычно называю вспомогательным процессом. Но эти процессы также совпадают с основным процессом, они также разветвляются из процесса Zygote и управляются AMS.
  4. Родной процесс
    Помимо Java, в Android также есть NDK, вы можете использовать C / C ++ для разработки, а затем вы также можете раскошелиться на этот процесс, я обычно называю его собственным процессом, AMS не может повлиять на собственный процесс. Управление, много свободы, в этой статье пока не будем об этом говорить

приоритет

Приоритет процесса приложения com.android.server.am.ProcessList Определен в классе. Этот класс не найден в Android API. Если вы хотите увидеть реализацию внутри, вы можете перейти к Android SDK, чтобы найти его, расположенный в $\sources\android-23\com\android\server\am\ProcessList.java

Существует несколько уровней приоритета (значение oom_adj):

  • UNKNOWN_ADJ = 16
    Зарезервирован самый низкий уровень, обычно этот уровень можно установить для кэшированных процессов.

Adjustment used in certain places where we don't know it yet. (Generally this is something that is going to be cached, but we don't know the exact value in the cached range to assign yet.)

  • CACHED_APP_MAX_ADJ = 15
    Процесс , пустой процесс, сначала будет уничтожен в случае нехватки памяти

This is a process only hosting activities that are not visible, so it can be killed without any disruption.

  • CACHED_APP_MIN_ADJ = 9
    процесс кэширования, который является пустым процессом
  • SERVICE_B_ADJ = 8
    неактивный процесс

The B list of SERVICE_ADJ -- these are the old and decrepit services that aren't as shiny and interesting as the ones in the A list.

This is the process of the previous application that the user was in. This process is kept above other things, because it is very common to switch back to the previous app. This is important both for recent task switch (toggling between the two top recent apps) as well as normal UI flow such as clicking on a URI in the e-mail app to view in the browser, and then pressing back to return to e-mail.

  • HOME_APP_ADJ = 6
    Процесс взаимодействия с домом

This is a process holding the home application -- we want to try avoiding killing it, even if it would normally be in the background, because the user interacts with it so much.

This is a process holding an application service -- killing it will not have much of an impact as far as the user is concerned.

  • HEAVY_WEIGHT_APP_ADJ = 4
    Процесс с большим весом

This is a process with a heavy-weight application. It is in the background, but we want to try to avoid killing it. Value set in system/rootdir/init.rc on startup.

  • BACKUP_APP_ADJ = 3
    Процесс, для которого выполняется резервное копирование

This is a process currently hosting a backup operation. Killing it is not entirely fatal but is generally a bad idea.

  • PERCEPTIBLE_APP_ADJ = 2
    Воспринимаемый процесс, например воспроизведение музыки

This is a process only hosting components that are perceptible to the user, and we really want to avoid killing them, but they are not immediately visible. An example is background music playback.

This is a process only hosting activities that are visible to the user, so we'd prefer they don't disappear.

This is the process running the current foreground app. We'd really rather not kill it!

This is a process that the system or a persistent process has bound to, and indicated it is important.

This is a system persistent process, such as telephony. Definitely don't want to kill it, but doing so is not completely fatal.

The system process runs at the default adjustment.

  • NATIVE_ADJ = -17
    Собственный процесс из системы

Special code for native processes that are not being managed by the system (so don't have an oom adj assigned by the system).

В Android-18 и ниже пустой процесс не называется CACHED_APP_MIN_ADJ, он называется HIDDEN_APP_MIN_ADJ. Есть некоторые различия, но значения одинаковы.

Как просмотреть приоритет процесса приложения

Для процесса App, поскольку он управляется AMS, будет файл oom_adj, в котором записывается значение oom_adj, но для процесса Native AMS не может его контролировать.

Lowmemorykiller механизм

Этот механизмgoldfishРеализованный на уровне, если вы хотите точно знать, как выбрать, чтобы убить процесс, вы должны увидетьКод lowmemorykiller.c под Android драйверы。

Те, кто скомпилировал золотую рыбку, должны знать, что на самом деле это ядро ​​Linux. Поскольку Android является операционной системой на основе Linux, ядро ​​фактически следует за ядром Linux, но есть некоторые вещи, которые должны быть разработаны (или оптимизированы) специально для Android. Lowmemorykiller является его частью и драйвером. Что касается того, почему это будет размещено drivers/staging В каталоге вы можете обратиться к этой статье«Небольшая дискуссия по стадионному дереву Linux»

Есть несколько ключевых моментов:

  1. Зарегистрируйте обратный вызов lowmem_shrinker в системе и вызывайте его, когда свободной системной памяти недостаточно для прекращения процесса
  2. Если свободной памяти меньше, чем сколько, убить процесс на этом уровне, я называю это стратегией
  3. Стратегия уничтожения определяется прикладным уровнем в соответствии с состоянием памяти, а записанный файл передается драйверу.
  4. Согласно стратегии, min_score_adj будет рассчитываться
  5. Каждый процесс приложения имеет значение oom_adj. Oom_score_adj (значение оценки) вычисляется в соответствии со значением oom_adj. Чем больше oom_adj, тем выше oom_score_adj. Те, которые выше min_score_adj, будут включены в список смерти.
  6. В списке смерти выберите процесс, который занимает наибольшую память для уничтожения

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

Что касается этой стратегии, то каждое ПЗУ может быть несовместимым: оно сформулировано в соответствии с объемом памяти и строгостью системы, но их можно разделить только на 6 уровней.

718073-ba0190d497cb5d26.jpg

Просмотр файла политики, переданного драйверу lowmemorykiller

minfree: список 6 порогов памяти.
Например: 32768,61440,73728,129024,147456,184320
adj: список 6 уровней oom_adj.
Например: 0,1,2,3,9,15
Эти два значения соответствуют друг другу, и процесс этого уровня будет прерван, когда свободной памяти станет меньше, чем много.

718073-8d5bac28f27e9b69.jpg

Параметры стратегии, определенные в ProcessList.java

Конечно, некоторые ПЗУ также определяют этот параметр в init.rc, а затем записывают minfree и adj файлы после загрузки и передают их драйверу

механизм отделки приложений

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

trimApplications - это метод, определенный в ActivityManagerService, такого класса в Android API нет, его нужно найти в SDK, расположенном в $\sources\android-23\com\android\server\am\ActivityManagerService.java

Этот механизм, вероятно, также имеет несколько ключевых моментов:

  1. Бесполезные процессы, пакет которых был удален, будут уничтожены
  2. За персистентным приложением позаботятся в первую очередь, а приоритет процесса будет установлен в PERSISTENT_PROC_ADJ = -12
  3. Приложение, которое Activity запускается только в основном процессе, будет считаться процессом с большим весом, HEAVY_WEIGHT_APP_ADJ = 4
  4. FORREGROUND_APP_ADJ = 0 только для процесса переднего плана, процесс переднего плана не будет убит
  5. Всякий раз, когда изменяется жизненный цикл Activity, Service и т. Д., Это вызывает корректировку oo_adj процесса.
  6. В этом процессе нет активности, и он будет убит первым
  7. Пустые процессы, скорее всего, будут убиты

Как повысить приоритет фонового процесса приложения

На самом деле идея платформы Android очень хороша: для пустых процессов и процессов, которые не имеют ничего общего, уничтожайте их напрямую, что не повлияет на взаимодействие с пользователем, но часто наше приложение имеет функцию push. Бывает, что GCM (Google Cloud Messaging) недоступно в Китае, поэтому во многих случаях мы также надеемся, что приложение не будет убито, когда оно находится в фоновом режиме.

Вы можете рассмотреть возможность повышения приоритета фонового процесса приложения. Вот несколько способов:

  • Настройте постоянные атрибуты в AndroidManifest.xml
  • Перегрузите событие возврата ключа, позвольте активности работать в фоновом режиме, не уничтожайте
  • Откройте Сервис и установите основной режим работы
  • Взаимодействуйте с NotificationManager, чтобы сделать процесс заметным процессом
  • Отправляйте / получайте трансляции, не позволяйте себе стать пустым процессом

Очевидно, что это потребляет больше энергии и является немного мошенническим. Некоторые требования могут быть не выполнены.

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

Иерархия процессов в Android

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

image

Процессы переднего плана

Вы наверняка думаете, что то, с чем взаимодействует пользователь в любой отдельно взятый момент времени является тем компонентом системы, который уничтожать никак нельзя (по крайней мере пока пользователь продолжает свою работу), и вы абсолютно правы. Одно но: «то, с чем взаимодействует пользователь в любой отдельно взятый момент времени» — слегка нечёткое определение. Одним из компонентов, попадающих в эту категорию, является Activity переднего плана — та, в которой onResume() уже вызван, а onPause() — ещё нет.

Пока одни Activity полагаются в своей работе только на самих себя, другие перекладывают часть её на привязанные службы (bound services). Любой процесс, содержащий службу, привязанную к Activity переднего плана, получает от системы точно такой же приоритет, как и процесс, содержащий саму Activity переднего плана. И это правильно: если Activity переднего плана полагает, что для её работы необходимо держать постоянное соединение со службой, то держать эту службу живой и невредимой в интересах как самой Activity , так и Android. Тот же самый принцип применяется и к поставщикам контента (content providers).

Но кто сказал, что Activity — это единственный компонент, исчезновение которого тут же заставит пользователя негодовать? Я вот точно бы рассвирепел, если бы моя музыка внезапно прекратила играть, или же подсказки от моей навигационной системы растворились бы в тумане. К счастью, Android позволяет службам уведомить систему о том, что они обладают высоким приоритетам через вызов метода startForeground(). Вызов этого метода является наилучшим способом обеспечить фоновое проигрывание музыки, а, что касается других задач, то перед тем как вызвать startForeground() , нужно спросить себя: «А пользователь точно сразу же заметит то, что моя служба прекратила свою работу?» Службы переднего плана должны использоваться только в критических случаях, тогда, когда прерывание работы станет сразу же очевидным.

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

Видимые процессы

Так, стоп, я же уже рассказал про Activity переднего плана? Рассказал, но Android в неисповедимой мудрости своей позволяет возникать таким ситуациям, когда ваша Activity является видимой, но не находится на переднем плане. Такое может случиться, когда Activity переднего плана стартует другую Activity , тема которой наследуется от Dialog. Или когда стартуемая Activity является полупрозрачной. Или когда вы вызываете системный диалог с запросом у пользователя тех или иных разрешений (который, на самом деле, является Activity !).

Activity является видимой от вызова onStart() до вызова onStop(). Между этими двумя вызовами можно делать всё, что ожидается от видимой Activity : обновление экрана, и так далее.

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

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

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

Служебные процессы

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

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

Обратите особое внимание на константу, возвращаемую вами из onStartCommand(), так как она определяет поведение системы в случае, если ваш процесс будет уничтожен при нехватке памяти:

    подразумевает, что система возродит вашу службу тогда, когда это будет возможно, но она не будет заново посылать службе последний ею полученный Intent (например, вы сами можете восстановить состояние, или у вас есть самописный жизненный цикл, определяющий, что делать при старте и останове службы). предназначается для служб, которые хотят запускаться заново с тем же самым Intent 'ом, который был получен ими в onStartCommand() пригодится службам, которые необязательно перезапускать, если они тихонько растворились в тумане. Такое поведение может быть полезно для служб, выполняющих такие периодические задачи, выполнение которых можно на время опустить.

Фоновые процессы

Допустим, что у вас была Activity переднего плана, и пользователь нажал на кнопку Home, что привело к вызову onStop(). Если кроме этой Activity у вас больше не было ничего, что позволяло бы и дальше сохранять высокий приоритет вашего процесса, то ваш процесс переходит в разряд фоновых процессов. Они, кстати, и занимают большую часть памяти устройства, на случай, если пользователь решит потом вернуться к одному из ранее открытых приложений.

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

Пустые процессы

Как и в любой иерархии, всегда есть самый низкий уровень. В пустых процессах нет ни одного активного компонента, и Android может уничтожить их в любой момент, но обычно они всё-таки удерживаются в памяти какое-то время (это опять к слову об эффективном использовании памяти, которое не заключается в том, чтобы вычищать всё подряд).

На что стоит обратить внимание

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

Важно также помнить, что приоритет вашего процесса определяется тем, что происходит на уровне компонентов. Это означает, что если вы запустите очень важную задачу, которая должна выполняться долгое время, в отдельном потоке, но из-под Activity , то вас ждёт неприятный сюрприз, когда ваш процесс внезапно станет фоновым. Используйте доступные вам инструменты (например, службы, или службы переднего плана), чтобы гарантировать, что система в курсе того, что вы делаете.

Не забывайте о других и помните о вашем пользователе

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

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


Если у вас несколько процессов, вы можете сначала найти PID нужного вам процесса, посмотрев на вторую колонку (то есть первое число) результата следующей команды:


И потом прихлопнуть этот процесс:


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

Мы поговорили о некоторых новых интересных функциях Android Lollipop

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

Но Приоритетный режим, похоже, останется здесь, поэтому в этом руководстве мы поможем вам взять его под контроль.

Что такое режим приоритета и что он делает?

Если у вас есть Android-устройство с версией 5.0 Lollipop или новее, у вас будет приоритетный режим по умолчанию. Чтобы получить к нему доступ, нажмите кнопку увеличения или уменьшения громкости на телефоне, и под слайдером громкости, отмеченным звездочкой, появится опция.

, Тем не менее, приложение не умное приложение; то есть он не распознает автоматически, какое приложение раздражает или какие звонки вы хотите получать. Это то, что вы должны будете установить сами.

Кроме того, приоритетный режим может быть настроен на автоматическое включение в определенное время в определенные дни или в определенное время каждый день. Например, Android легко автоматизировать, чтобы не беспокоить вас ночью

Как установить продолжительность режима приоритета Автоматизировать это

Приоритет режим объема реактивировать

Когда вы активируете Приоритетный режим с помощью кнопок громкости, вы можете настроить его на запуск:

Простои приоритет режим

Прокрутите вниз до настроек, и вы можете:

  1. Выберите дни недели, в которые вы хотите, чтобы время простоя включалось автоматически.
  2. Установите время начала и время окончания.
  3. В разделе «Разрешенные прерывания» выберите «Только приоритет», чтобы разрешить приоритетный режим, или «Нет» для общего режима «Не беспокоить».

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

Как разрешить звонки и тексты от нужных людей

перерывы-контакты

На этой же странице настроек вы также можете переключать события, напоминания, звонки и тексты, чтобы разрешить или запретить их в приоритетном режиме.

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

Как разрешить приложение в режиме приоритета

настройки-приложения-уведомление

В Android Lollipop есть новое меню для управления уведомлениями для всех приложений, куда вам нужно будет перейти.

  1. Выберите «Настройки»> «Звук и уведомления»> «Уведомления приложений».
  2. Нажмите на приложение, которое вы хотите разрешить в режиме приоритета
  3. Нажмите на переключатель «Приоритет», который позволит уведомлениям этого приложения проходить в режиме «Приоритет».

приложение-уведомления-приоритеты тумблер

из помеченных контактов в вашей телефонной книге Android.

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

Как вернуть тихий режим?

SoundHub-слайдеры

Не нравится Приоритетный режим, и вы хотите вернуть старый добрый Silent Mode? Как всегда, для этого есть приложение! Познакомьтесь с SoundHUD [Больше не доступно], который вы можете скачать и попробовать бесплатно в течение двух недель, после чего он оплачивается.

SoundHUD добавляет более глубокие настройки управления громкостью к вашим кнопкам увеличения / уменьшения громкости. Благодаря этому вы можете регулировать громкость звонка телефона, уведомлений, будильника, музыки и голосовых вызовов. Он появляется при нажатии кнопок громкости, поэтому вы можете быстро настроить параметры для определенного источника звука и вернуться к тому, что вы делали.

Если вы планируете использовать SoundHUD, рекомендуем перейти в Дополнительные настройки приложения и включить параметры для Игнорировать длительные нажатия а также Отключить на экране блокировки. Таким образом, приложение не связывается с другими функциями Android.

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

Что вы думаете об этой функции от Android? Вам не хватает тихого режима? Дайте нам знать об этом в комментариях.

Как настроить приоритетный режим Android (и вернуть тихий режим)

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

Но Приоритетный режим, похоже, останется здесь, поэтому в этом руководстве мы поможем вам взять его под контроль.

Что такое режим приоритета и что он делает?

Если у вас есть Android-устройство с версией 5.0 Lollipop или новее, у вас будет приоритетный режим по умолчанию. Чтобы получить к нему доступ, нажмите кнопку увеличения или уменьшения громкости на телефоне, и под ползунком регулировки громкости будет отображаться звездочка.

Работа в режиме «Приоритет» состоит в том, чтобы блокировать раздражающие уведомления в Android. Тем не менее, приложение не является умным приложением; то есть он не узнает автоматически, какое приложение раздражает или какие звонки вы хотите получать. Это то, что вы должны будете установить сами.

Кроме того, приоритетный режим может быть настроен на автоматическое включение в определенное время в определенные дни или в определенное время каждый день. Например, Android легко автоматизировать, чтобы не беспокоить вас ночью .

Как установить продолжительность режима приоритета и автоматизировать его

Приоритет режим объема реактивировать

Когда вы активируете Приоритетный режим с помощью кнопок громкости, вы можете настроить его на запуск:

  1. На неопределенный срок — вам придется вручную деактивировать его, когда вы будете готовы разрешить прерывания
  2. На фиксированное время — вы можете настроить его автоматическое отключение через 15 минут, 30 минут, 45 минут, 1 час, 2 часа, 3 часа, 4 часа или 8 часов.

Простои приоритет режим

Прокрутите вниз до настроек, и вы можете:

  1. Выберите дни недели, в которые вы хотите, чтобы время простоя включалось автоматически.
  2. Установите время начала и время окончания.
  3. В разделе «Разрешенные прерывания» выберите «Только приоритет», чтобы разрешить приоритетный режим, или «Нет» для общего режима «Не беспокоить».

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

Как разрешить звонки и тексты от нужных людей

перерывы-контакты

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

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

Как разрешить приложение в режиме приоритета

Как мы уже говорили, Priority Mode — это своего рода привратник. Это позволит только уведомления из приложений, которые вы одобряете. Итак, как вы разрешаете эти приложения?

настройки-приложения-уведомление

В Android Lollipop есть новое меню для управления уведомлениями для всех приложений, куда вам нужно будет перейти.

  1. Выберите «Настройки»> «Звук и уведомления»> «Уведомления приложений».
  2. Нажмите на приложение, которое вы хотите разрешить в режиме приоритета
  3. Нажмите на переключатель «Приоритет», который позволит уведомлениям этого приложения проходить в режиме «Приоритет».

приложение-уведомления-приоритеты тумблер

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

Как вернуть тихий режим?

SoundHub-слайдеры

Не нравится Приоритетный режим, и вы хотите вернуть старый добрый Silent Mode? Как всегда, есть приложение для этого! Познакомьтесь со SoundHUD [Больше не доступно], который вы можете скачать и попробовать бесплатно в течение двух недель, после чего он оплачивается.

SoundHUD добавляет более глубокие настройки управления громкостью к вашим кнопкам увеличения / уменьшения громкости. Благодаря этому вы можете регулировать громкость звонка телефона, уведомлений, будильника, музыки и голосовых вызовов. Он появляется при нажатии кнопок громкости, поэтому вы можете быстро настроить параметры для определенного источника звука и вернуться к тому, что вы делали.

Если вы планируете использовать SoundHUD, мы рекомендуем перейти в Расширенные настройки приложения и включить параметры Игнорировать длительные нажатия и Отключить на экране блокировки . Таким образом, приложение не связывается с другими функциями Android.

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

Приоритетный режим пользуется большой ненавистью в сообществе Android — в основном из-за того, что настоящий тихий режим был убран. Тем не менее, чем больше я играю с Приоритетным режимом, тем больше разогреваюсь.

Что вы думаете об этой функции от Android? Вам не хватает тихого режима? Дайте нам знать об этом в комментариях.

Программа находится в режиме тестирования и доработки способа удержания апп в памяти.

Прикрепленное изображение

Отсюда и возникла эта тема. Хотим сделать программу, которая все таки будет работать.
Вроде получилось ;)
Смысл данной программы выполнить 4 команды
pidof - чтобы узнать в какой папочке искать файлик с приоритетом
cat - прочитать, чего в нем сейчас
и если в этом файлике НЕ -17, то
echo - записать -17
Ну и подсказали все это закрепить командой chmod и значениями 444

Цель
Нужные приложения всегда в памяти, мгновенно открываются, мгновенный переход между приложениями ну и экономия батареи (тк не нужно подгружать данные и загружать проц/поднимать частоту)

Причина редактирования: появилась стабильная версия

Black_BG, я выяснил, что если свернуть-развернуть приложение, то эта настройка сбивается, т.е. AutoKiller просто меняет oom_adj процесса (в теме про твики я чуть подробнее это описал). Наверное, адекватного решения задачи (кроме как ежеминутно или даже чаще выполнять эти команды) нету, потому что Android меняет эти значения при изменении состояния приложения (свёрнуто, передний план, задний план, . ). Как отловить эти события "снаружи" интересующего приложения я не знаю.

Ищу программиста, который сможет написать простую программу

подробности в шапке темы.

Кажется, на xda есть похожее приложение. Оно находится в стадии разработки. Читать, начиная отсюда.
Там на 6-й странице есть ссылка на форму регистрации для тестирования.
Мне файл так и не пришёл. Может, тебе повезёт?

Добавлено 23.10.2012, 08:07:

можно пимп май цпу переделать. она же аналогична, только пишет по другому адресу.

можно) все тесты на мне если нужно.

Добавлено 23.10.2012, 08:34:

если поможет, то можно эту прожку разобрать. как мне кажется, что смысл похож, но пишет просто в другой файл. хотя могу ошибаться.
® Pimp My CPU

Версия 0.1 бетта.
Сыровато и много чего из интерфейса не доделано.
При запуске показывает список приложений, всех установленных в системе.
У запущенных приложений OOM Value будет отличным от "--".
Долгий тап на нужном элементе меняет устанавливаемое OOM (в проге так и написано "OOM Set to") между -17 и то что система поставит (в программе "--")
При выходе запускается сервис, который раз в 5 секунд(можно чаще-будет жрать сильнее батарею) проверяет что запущено на экране.
При изменении запущенного приложения он обновляет всем заданным ООМ в -17.
Слушаю критику
AutoOOMmanager.apk ( 30.42 КБ )

UPD
У меня при запуске появляется "Reading apps" на 1 секунду, исчезает - и всё. Чёрный экран с названием программы.
В логе никаких ошибок нету.

У меня при запуске появляется "Reading apps" на 1 секунду, исчезает - и всё. Чёрный экран с названием программы.
В логе никаких ошибок нету. Проверил на SGS3, Sensation XE, Desire S - на всех нормально запускается и показывает список приложений. У меня все запускает на сенсации на СМ9 с андроидом 4.0
нормальный интерфейс - ничего лишнего)
Есть фигня, что не подхватывает приложение и не делает -17, хотя оно болтается с приоритетом 10-12. возможно из-за быстрых переходов.

не критика. просто о логике приложения хотел поговорить.
Сейчас, как я понимаю, каждые 5 сек сервис проверяет, что за окно открыто. если окно иное чем 5 сек назад, заново переприсваивает -17 нужным приложениям. так?

Рассмотрю 2 ситуации, на обе уже наткнулся.

1) я сижу и читаю книгу 2 часа. ничего не происходит. зачем здесь каждые 5 сек проверять есть ли новое окно?
2) я зашел в приложение и в туже секунду вышел из него. получается сервис проморгал этот момент.

Я предлагаю следующую логику. Раз сервис все равно делает проверку каждые 5 сек на новое окно, то давайте лучше он каждые n секунд/минут будет тупо сувать -17 во все нужне места.


В идеале, я представляю следующую логику программы

  1. Сделали нужные приложения в проге неубиваемыми.
  2. вышли из проги и запустился сервис
  3. сервис НЕ мониторит каждые n секунд, а ждет события "запуск приложения"/"смена приложения"/"поменялось окно"
  4. Как только событие произошло, он меняет на -17 в нужных местах и ждет след. события.
  5. Также работает таймер который раз в n минут (именно минут, это для ситуации с чтением книги) принудительно запихивает -17 в нужные места, не глядя что там уже есть.

Посмотрите пожалуйста как реализовано ожидание события в ® Pimp My CPU и ® SetCPU
если удастся реализовать именно также, было бы замечательно, тк мне представляется, что это лучшая реализация, тк сбоев ни пимп ни сетцпу не дают даже при быстром переходе по домику (долгое нажатие)

Версия 0,1 бэта добавлена в шапку

Сейчас, как я понимаю, каждые 5 сек сервис проверяет, что за окно открыто. если окно иное чем 5 сек назад, заново переприсваивает -17 нужным приложениям. так? 1) я сижу и читаю книгу 2 часа. ничего не происходит. зачем здесь каждые 5 сек проверять есть ли новое окно?
2) я зашел в приложение и в туже секунду вышел из него. получается сервис проморгал этот момент.
вроде как нет способа отследить запуск приложения, вернее мне он не известен.
Посмотрите пожалуйста как реализовано ожидание события в ® Pimp My CPU и ® SetCPU

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

RubberBigPepper,
ваше детище работает и на 4 и на 2.3

Просто тот же таскер например, конечно работает со скриптами криво, но он как то отслеживает события запуска приложения и меняет мне например яркость мгновенно.
у меня сделано как в нем? чтоб при запуске нард автояркость отключалась и включалась яркость 40% (начальная задача) и как только я выхожу из нард (без разницы как, кнопка выход или домик) автояркость опять включается (конечная задача) и все это присходит прям мгновенно как и в пимпе и сетцпу.
Аналогично у меня сделано и на контакты, только яркость 100%
На оперу у меня сделано, чтоб включался автоповорот, а при выходе выключался.
про профиля на звонок и там на подключение зарядника я не говорю, эти события наверное легко отследить, да и не нужны они нам.

Поглядел.
Код из pimpа, хорошо сделана программа, но вылетает на моих телефонах сразу.
Обфускатором прошлись-гут.

То есть сделано как и у меня, только раз в секунду проверка запущенного приложения

Читайте также: