2

Ситуация такова: У меня есть активность, которая имеет одну панель инструментов, один Tablayout и один View пейджера (что содержит 5 фрагментов)Почему мое приложение android потребляет слишком много памяти?

Внутри первого фрагмента у меня есть макет, который будет содержит один фрагмент по умолчанию, который будет иметь вид Recycler с двумя столбцами. Каждый элемент на нем имеет изображение, загруженное из Интернета (с Glide и сохранение в кеше), и когда пользователь нажимает на держатель (один элемент списка), изменит этот фрагмент по умолчанию на «контейнер макета» на другой, который будет иметь новый просмотр Recycler с изображениями, загруженными из Интернета с использованием Glide. Подобно странице поиска Instagram.

Я думал, что проблема с Glide была проблемой, но я поместил весь код, и когда я запустил приложение на эмуляторе, он потребляет 89 МБ ОЗУ больше o меньше.

EXTRA ИНФОРМАЦИЯ

  • Каждый элемент на RView внутри любого фрагмента создается из загрузив JSONArray с помощью Volley, я поставил запрос в очереди MySingleton и определить контекст как getContext() (я должен использовать getActivity(). ApplicationContext() вместо getContext(), когда код из фрагмента?)

(внутри фрагмента, который находится внутри вида пейджера, который находится внутри деятельности)

MySingleton.getInstance(getContext()).addToRequestQueue(req); 

Затем он загружает URL-адрес изображения и заряжает его в режиме просмотра с помощью Glide.

if(holder.publication.getPicture() != null){ 
     Glide.with(holder.ctx).load(holder.publication.getPicture()).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(holder.picture_imgView); 
    } 
  • Я не использую статические переменные

  • Кроме того, я удалить все анимации из Ресайклер Просмотр элементов и по-прежнему быть медленным.

  • Я использую Android монитор и опцию «Jump Java Heap», чтобы увидеть, как она управляет памятью и основной номер на Byte [] (Я не понимаю, с помощью этого инструмента)

Спасибо большое!

UPDATE На моем журнале, я всегда получаю это:

W/ViewRootImpl: Dropping event due to no window focus: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0xc8, repeatCount=1, eventTime=18009881, downTime=18009352, deviceId=-1, source=0x101 } 

I/Choreographer: Skipped 98 frames! The application may be doing too much work on its main thread. 
+0

Я смысл использования ОЗУ совершенно нормальный, учитывая, что вы также загружаете изображения. – Nabin

+0

Иногда значение поднимается до 120 или 130 мб, но я думаю, что, наконец, его разрешу. Похоже, проблема была на растяжках, они были слишком большими. Я продолжу анализ, чтобы дать окончательное решение. –

ответ

2

Ну, я думаю, что найти решение, и я пришли к выводу, эти вещи:

  • Использование на .jpg вводимого коэффициента формат или любой файл размером более 150 КБ будет использовать память. В моем случае я использовал очень большие изображения в качестве фона и маленьких изображений на просмотрах recycler, но был более 200kb. Это убивали Рама.
  • Лучше использовать локальный контекст фрагмента (getContext()) при вызове запроса Volley и поместить его в очередь MySingleton.
  • Держатели на recyclerView должны быть статическими внутренними классами, потому что вы собираетесь их повторно использовать, и это хороший способ сохранить память.
  • Если вы используете Glide на каждый держатель для загрузки изображений и есть какая-то связь пуст, вы должны очистить ImageView: Glide.clear(ImgView);
  • Создание объектов для вызова SharedPreferences не является хорошей идеей. Лучше использовать глобальный класс, который использует один контекст (активности, который содержит все фрагменты) и вызывается SharedPreferences. Что-то вроде: MyCallerClass.getInstance().getPrefsDataOfOuser();

Все это мои выводы, которые я получил в эти дни ... теперь мое приложение использует 50Мб памяти при загрузке изображений скольжением и 80MB или 90MB макс на поиск в реальном времени ...

+0

У меня есть аналогичная проблема, за исключением того, что я не использую большие изображения в качестве фона. Я полагаю, что ваше решение больше всего касалось использования меньших изображений, сколько других предложений помогло? – Tony