Как имитировать убийство приложения от Android GC

Мне нужно проверить сериализацию\десериализацию приложения в следующих случаях:

  • приложение было в фоновом режиме много времени (режим ожидания) и был убит GC;
  • приложение было в фоновом режиме и было убито GC по причине нехватки ресурсов (памяти\cp);

На некоторых устройствах он может быть смоделирован путем запуска 1-2 игр. Но на четырехъядерных устройствах с памятью 1 ГБ это очень-очень сложно с 4-10 тяжелыми играми и занимает много времени.

Я пытаюсь реализовать некоторую демонстрацию, в которой эмуляция загрузки ресурсов:

  • создавать массивы растровых изображений
  • создавать массивы объектов
  • запустить множество услуг
  • запустить много мероприятий

Но никакого результата, приложение все еще работает (даже на старых устройствах), и моя демонстрация разбилась с OutOfMemoryException.

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

Благодарю!

Ответ 1

Ну, "GC" на самом деле злоупотребляют "Out Of Memory Killer", и это убивает приложения, как если бы сигнал 9. В корневом устройстве вы должны иметь возможность вызывать команду kill (1) из оболочки или kill (2) из родной (я не уверен, привязан ли он к Java) и убить ваше приложение, когда захотите.

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

Ответ 2

Установите любой чистящий элемент памяти в хранилище воспроизведения. Я устанавливаю это: easymemorycleaner

как только вы очистите память. Ваша сохраненная переменная внутри памяти исчезнет. Если вы не сохранили данные в Parcelable. Это будет настойчиво.