как определить когда у устройства мало памяти на Android

1

Мое приложение - фоновый сервис, работающий на переднем плане. В ситуациях с низкой памятью некоторые из моих потоков обработки убиваются без перезапуска приложения. Это вызывает очень странное поведение. Я хотел бы получить предупреждение от ОС, когда память будет низкой, пока мой процесс не будет убит. Это позволит мне освободить память или перезапустить мое приложение. Кажется, я не могу найти трансляцию или уведомление для этой ситуации.

  • 0
    Хороший вопрос, мне также интересно, как получать уведомления о нехватке памяти.
Теги:
multithreading
ram
memory
process

2 ответа

1
Лучший ответ
  1. В Android постоянно работает служба "DeviceStorageMonitorService", которая периодически проверяет каталог системного хранилища.
  2. Эта служба поддерживает порог памяти, который составляет 10% от назначенной внутренней системной памяти, поэтому в случае P2 это 861 МБ, поэтому порог памяти составляет 86 МБ. Мы можем изменить это, изменив макрос DEFAULT_THRESHOLD_PERCENTAGE внутри файла DeviceStorageMonitorService.java.
  3. Он проверяет размер доступной памяти с порогом памяти, если она меньше пороговой, она будет транслировать уведомление и липкое намерение трансляции ACTION_DEVICE_STORAGE_LOW. В случае полного намерения памяти ACTION_DEVICE_STORAGE_FULL

Получите это транслируемое намерение в своем приемнике и обработайте приложение.

  • 0
    Я сталкивался с этим хорошо, но я решил, что он контролирует внутреннюю или внешнюю память устройства, а не оперативную память. Так как вы думаете, если я освободлю память или перезапущу свое приложение, когда получу намерение ACTION_DEVICE_STORAGE_LOW, это должно решить мою проблему? Спасибо
  • 0
    Я смотрю на это там, да, это действительно то, что я ищу. Еще раз спасибо, надеюсь, это поможет кому-то еще.
Показать ещё 3 комментария
1

Предлагаю вам прочитать "Управление памятью приложений" здесь: https://developer.android.com/training/articles/memory.html. Метод обратного вызова системы onTrimMemory сообщит вам о различных сценариях использования ОЗУ, как указано значением аргумента метода. Подробнее см. Https://developer.android.com/reference/android/content/ComponentCallbacks2.html#onTrimMemory (int). Это описание метода говорит:

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

Чтобы получить текущий уровень обрезки процессов в любой момент, вы можете использовать ActivityManager.getMyMemoryState(RunningAppProcessInfo).

Например, TRIM_MEMORY_COMPLETE в качестве аргумента для onTrimMemory:

public static final int TRIM_MEMORY_COMPLETE Уровень для onTrimMemory (int): процесс близится к концу списка LRU в фоновом режиме, и если больше памяти не будет найдено вскоре, оно будет убито. Постоянное значение: 80 (0x00000050)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню