2015-11-14 5 views
2

В этом случае, когда я хочу моделировать потерю памяти из памяти в приложении. У меня много сбоев от Crashlytics, которые показывают, что конечные пользователи сталкиваются с сбоями OOM, и я не смог воспроизвести их с помощью своего устройства (Samsung S4). У меня просто сбой и никаких других следов от краштитиков.Имитация вне памяти в android

Мне было интересно, есть ли у кого-то способ воспроизвести их для их тестирования (без какого-либо изменения кода).

Я видел это: Testing Android for Out of Memory scenarios, но еще не получил шанс запустить его.

Любая помощь будет оценена по достоинству.

+2

Как вы собираетесь отлаживать реальную проблему, если вы искусственно скажите приложению, что у него нет памяти? Есть определенные инструменты для анализа вашей кучи, но они не приносят большой пользы в искусственных условиях, поскольку все будет выглядеть нормально ... – dcow

+0

Нет, я не собираюсь искусственно это делать. Вот почему я сказал - без изменения кода. Я хотел спросить, что, если вы открываете множество приложений и переключаетесь между ними или каким-либо другим способом сделать это (например, любые настройки или любое другое приложение, которое можно использовать) – Akshat

ответ

0

Надеюсь, я правильно понял вопрос: есть очень простой способ, если вы не хотите менять множество настроек. Перейдите в опции dev и сделайте это «фоновыми процессами». Теперь вы можете выйти из приложения, запустить новый и вернуться в исходное состояние, и оно будет уничтожено из-за нехватки памяти.

+0

Нет, OP не спрашивает, как имитировать сценарий где либо у устройства закончилась нехватка памяти (маловероятно), либо приложение потратило свою собственную кучу, пропуская память, что привело к сбоям в распределении памяти, а приложение к сбою (скорее). – dcow

0

Мне удалось смоделировать ошибку OOM, заменив список изображений в приложение очень большие изображения. 5mb вместо обычных 250k. В Wikimedia есть много больших изображений, которые вы можете использовать. https://commons.wikimedia.org/wiki/File:Snake_River_(5mb).jpg

1

Существует множество способов вызвать OOM.

  1. Используйте очень большое изображение (кстати, этот прецедент является источником многих реальных проблем OOM в приложениях). Я заменил изображение на 1 элемент в моем Recycler, поэтому, когда я перейду к нему, он загрузит большое изображение (тогда я смогу провести тест таким образом).

  2. Создайте цикл, который выделяет объекты в память. Вы можете просто «обновить» кучу объектов в цикле и запустить его таким образом. Если вы выделяете достаточно строк или int объектов в один массив, это в конечном итоге запустит OOM (это также хороший способ постепенно строить условие OOM). Строки вызовут OOM быстрее, чем ints (но добавьте достаточно объектов в массив, и в итоге он станет слишком большим).

Смежные вопросы