ActivityManager киллер процессов (приложений) в Android

archive view archive save

android-blood.jpgЗачем андроид убивает мои приложения? Недавно открытое приложение вскоре закрылось. Почему андроид агрессивно выгружает приложения при достаточной памяти? Причины вылетов приложений.

  1. Killing recent apps
  2. This is strange
  3. Эпилог

Про жизненный цикл activity в Android - это мы всё читали:

Killing recent apps

По-идее убивание (приостановка) приложения должно происходить спустя определённый промежуток времени (30 minutes), например:

dumpsys deviceidle output:
 
 Settings:
 ...
 light_max_idle_to=+15m0s0ms
 ...
 inactive_to=+30m0s0ms
 ...
 idle_after_inactive_to=+30m0s0ms

А приложения выдающие notification on the notification bar должны продолжать работать:

android - How to prevent ActivityManager from killing my application's background process - Stack Overflow

Running services will be terminated every 30 minutes. Services that wish to remain alive for longer than this must call Service.startForeground, which places a notification on the notification bar, so that users know that your service is permanently running and potentially sucking battery life.

Но что-то в Android 10 пошло не так, и такие VPN приложения как Orbot, Rethink и personalDNSfilter стали беспощадно убиваться ActivityManager, о чем был начат подробный холи-вар:

Что кроме personalDNSfilter убиваются и другие VPN приложения такие как Orbot и Rethink выяснилось чуть позже, и проблема заключалась в том, что:

  1. ActivityManager нещадно убивает каждое 3-4 ранее открытое приложение после отключения экрана;
  2. Сделать VPN приложение постоянным в сетевых настройках (Не отключаться от VPN) не спасает от убийцы ActivityManager;
  3. Прошивка гаджета самая новая;
  4. Приложения все с F-Droid;
  5. Несмотря на уведомления в notification bar, VPN приложения убиваются ActivityManager;
  6. Свободной RAM 2 из 4 ГБ;
  7. Экономия батареи для приложений, менеджер батареи, DuraSpeed - всё отключено, жри не хочу;
  8. В настройках разработчика Вытеснять фоновые Activity отключено, Лимит фоновых процессов стандартный;
  9. Сброс настроек сети и приложений проблему не решают;
  10. Сброс настроек к заводским настройкам, также проблему не решают;
  11. Короче.., полная жопа...

Подобная проблема создаёт приличный геморрой, когда переключившись между 3-4 приложениями, через 15 сек отключился экран, слетело VPN приложение и все твои данные-досвиданные пошли раком по-болотам...

Наглядное видео этого глюкодрома можно скачать по ссылке:

Перечитана была туева хуча всякого шлака:

  • Почему андроид агрессивно выгружает приложения при достаточной памяти? — Хабр Q&A
  • Почему мои приложения продолжают падать на Android?
  • 18 лучших исправлений - 4pmtech (Russia)
    android - Система убивает приложение в случайные моменты времени без краша(?) -
  • Stack Overflow на русском
    Почему вылетают приложения на Android и как с этим бороться - ТопНомер.ру
  • и прочая...литература

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

  • Перезагрузить телефон;
  • Переустановить приложение;
  • Удалить кэш приложения;
  • Освободить место в хранилище;
  • Проверить сетевое соединение;
  • Проверить на (барано-)вирусы;
  • Сбросить Android до заводских настроек.

Но нифига непомогало - в числе прочего:

  • Протирать экран;
  • ...
  • Перепрошивать - зае.ало.

Система убивает каждое 3-4 ранее открытое приложение, но termux сессия почему-то остаётся нетронутой и продолжает работать - это придавало сил ковырять дальше.., шырше и глубже!

This is strange

Да, - это странно, НО ФАКТ!

Orbot, Rethink и personalDNSfilter падали постоянно после попадания на 3-4 позицию списка недавно открытых приложений.

Вспомнилось ещё одно VPN приложение - ProtonVPN.

После установки Proton VPN я запустил его и попробовал открыть ещё 4 недавних приложения, свернул список открытых приложений на рабочий стол и дождался выключения экрана. После включения экрана я увидел, что Proton VPN продолжает работать!

Затем я отключил Proton VPN и открыл PersonalDNSfilter VPN, повторил все операции переключения между недавними приложениями... и - о чудо! PersonalDNSfilter продолжает работать!!!

Затем я удалил Proton VPN, перезагрузил устройство и перепроверил - о чудо! PersonalDNSfilter продолжает работать!!!

Затем я обратно включил Duraspeed, Battery Manager, Fly и режим энергосбережения, перезагрузил устройство и перепроверил - о чудо! PersonalDNSfilter продолжает работать!!!

НЕ ЗНАЮ, ЧТО ПРОИЗОШЛО (обновился mdk/sdk, обновились некоторые скрытые системные настройки/конфиги и т.д.), НО после установки Proton VPN ПРОБЛЕМА ИСПРАВЛЕНА, и теперь все приложения с сообщением в панели уведомлений, включая personalDNSfilter, не закрываются ActivityManager после каждого выключения экрана!

Перед установкой Proton VPN был сброс до заводских настроек, но даже с заводскими настройками проблема наблюдалась при использовании только одних предустановленных приложений, а уже после теста голой системы были установлены все дополнительные 200 приложений и уже потом поверх них установлен Proton VPN.

Правда до Proton VPN были ещё небольшие изменение в конфигурации ActivityManager:

# settings put global activity_manager_constants max_cached_processes=128
# cmd device_config put activity_manager max_cached_processes 128
# cmd device_config put activity_manager max_phantom_processes 32
// where (<millis>) 3600000 = 60min.
# device_config put activity_manager max_empty_time_millis 3600000
 
# device_config list activity_manager
activity_manager/Phenotype_flags=
activity_manager/max_cached_processes=128
activity_manager/max_empty_time_millis=3600000
activity_manager/max_phantom_processes=32
# settings get global activity_manager_constants
max_cached_processes=128

Внесённые изменения в activity_manager_constants сохранились после перезапуска, но похоже на то, что они не работали, - после изменений я перезапускал и проверял работу устройства несколько раз, проблема сохранялась.

Спустя несколько дней после этих изменений, был установлен Proton VPN и проблема исчезла, после чего Proton VPN был удалён.

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

Эпилог

Примечательно, что не все сделанные в системе Андроид косяки можно исправить сбросом настроек к заводским.

Не исключено, что проблема началась после использования программы EnforceDoze с рут-правами, которая однажды поломала камеру после включения опции Disable all sensors on screen off (motion, camera...).

Отключение/включение/сброс настроек EnforceDoze не помогло восстановить работу камеры. Камера снова заработала кажись после удаления/переустановки EnforceDoze и/или вкл/выкл Disable all sensors on screen off - как-то так кажись.

Возможно EnforceDoze задело ещё кое-какие системные конфиги, которые были восстановлены после установки Proton VPN?!

Или то изменения в конфигурации ActivityManager применились с запизданием задержкой 2-3 дня и/или после 5-10й перезагрузки.., а установка Proton VPN оказалась случайным участником этого глюкодрома..:)

Учитывая, что встроенные в Андрона бэкдоры под названием ака Сервисы Google Play постоянно что-то загружают и типа обновляют (без предупреждения), то сказать однозначно в какой части системы глючит, - довольно сложно.

Иными словами, источник проблемы в данном случае достоверно неизвестен, но то, что виной всему говнокод (shitcode), - никаких сомнений нет.

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


Комментарии в блоге
Новое на форуме