Форум программистов, компьютерный форум CyberForum.ru

Оптимизация списка новостей - Android

Войти
Регистрация
Восстановить пароль
 
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
24.02.2016, 20:26     Оптимизация списка новостей #1
Написал я небольшое приложение которое выводит новости с одного сайта. Все бы ничего, но получилось много катртинок. Очень много. Примерно к 10 новости все начинает тормозить, дальше вылетает с out of memory. Есть ли возможность взять и скрыть вью, очистив память от картинок, но при этом не изменитьвысоту(чтоб скролл вью не прыгал) а потом если он вновь появится на экране - показать его?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
резкий
1890 / 1624 / 505
Регистрация: 12.05.2014
Сообщений: 5,849
Завершенные тесты: 1
24.02.2016, 20:39     Оптимизация списка новостей #2
какой вопрос - такой ответ
надо использовать не ScrollView, а RecyclerView (примеров вагон и в инете и на форуме)
- заводим класс-модель для новостей с полями типа title, image_url, data и так далее
- в отдельном потоке парсится сайт и все складывается в ArrayList
- создаем адаптер и передаем его в RecyclerView
- в ViewHolder-е внутри recyclerview заполняем поля в View, которое будет показывать новость
- картинки грузим библиотекой Glide
все
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
25.02.2016, 10:11     Оптимизация списка новостей #3
danyasworld, если вкратце, то можете использовать любой компонент, хоть ListView, хоть RecyclerView, хоть ScrollView. Если будете работать с картинками, надо почитать про weak reference или сразу использовать Fresco или Glide. Первый, вроде как, по некоторым параметрам получше будет.
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
25.02.2016, 10:15  [ТС]     Оптимизация списка новостей #4
Паблито, RecyclerView, к сожалению, был добавлен в более поздних версиях андроида, чем те минимальные которые у меня установлены. С остальным у меня и так порядок, все парсится подгружается и выводится. Единственная проблема в изображениях. Они скоро начинают занимать слишком много памяти
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
25.02.2016, 10:34     Оптимизация списка новостей #5
Цитата Сообщение от danyasworld Посмотреть сообщение
RecyclerView, к сожалению, был добавлен в более поздних версиях андроида
Библиотеки поддержки же есть.
Цитата Сообщение от danyasworld Посмотреть сообщение
Единственная проблема в изображениях.
Используйте библиотеки, выше сказали какие.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
25.02.2016, 10:55     Оптимизация списка новостей #6
Spelcrawler, честно говоря, не понял, зачем здесь RecyclerView? Чисто для красоты? Всё решается и стандартным ListView.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
25.02.2016, 10:57     Оптимизация списка новостей #7
Цитата Сообщение от CoolMind Посмотреть сообщение
честно говоря, не понял, зачем здесь RecyclerView?
Ну он удобнее намного, возможностей больше, базовые вещи проще чем в ListView. Ну и ТС вероятно, только учится использовать что-то подобное. Дак зачем ему изучать устаревший элемент, когда есть хороший новый?
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
25.02.2016, 10:59     Оптимизация списка новостей #8
Spelcrawler, здесь я согласен. Особенно он в пору, если использовать Material Design с его CardView.
Паблито
резкий
1890 / 1624 / 505
Регистрация: 12.05.2014
Сообщений: 5,849
Завершенные тесты: 1
25.02.2016, 11:54     Оптимизация списка новостей #9
Цитата Сообщение от danyasworld Посмотреть сообщение
чем те минимальные которые у меня установлены
почему бы просто взять и не посмотреть с какой версии андроида работает RecyclerView?
ListView - морально устаревший компонент, кроме вышеупомянутых анимашек еще есть кое что
проще процитировать
1.) Reuse cells while scrolling up/down - this is possible with implementing View Holder in the listView adapter, but it was an optional thing, while in the RecycleView it's the default way of writing adapter.

2.) Decouple list from its container - so you can put list items easily at run time in the different containers (linearLayout, gridLayout) with setting LayoutManager
одного только первого пункта должно хватить

или погуглить по словам "android recyclerview vs listview"
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
25.02.2016, 12:38     Оптимизация списка новостей #10
Да, первый пункт невероятен
Одно и то же, но у ListView сохраняется возможность работы и без ViewHolder. Так что преимуществ по первому пункту никаких.

Добавлено через 52 секунды
А если вспомнить про минусы RecyclerView, а также отсутствие Header, Footer, то и вовсе иногда лучше молчать, чем говорить.
Паблито
резкий
1890 / 1624 / 505
Регистрация: 12.05.2014
Сообщений: 5,849
Завершенные тесты: 1
25.02.2016, 12:46     Оптимизация списка новостей #11
ты просто еще не понимаешь в чем их разница и в чем профит ресайклера, поэтому и бесишься
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
25.02.2016, 12:50     Оптимизация списка новостей #12
Цитата Сообщение от CoolMind Посмотреть сообщение
Одно и то же, но у ListView сохраняется возможность работы и без ViewHolder
Только вот толку от ListView без ViewHolder'a не больше чем от ScrollView. И работа с ViewHolder'ом в RecyclerView намного прозрачнее и удобнее.
Цитата Сообщение от CoolMind Посмотреть сообщение
А если вспомнить про минусы RecyclerView, а также отсутствие Header, Footer, то и вовсе иногда лучше молчать, чем говорить.
Там есть декораторы можно ими сделать, можно в LayuotManager'e сделать, можно даже в адаптере сделать. Даже тот же ExpandableListView повоторить в RecyclerView на 15-20 минут.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
25.02.2016, 13:33     Оптимизация списка новостей #13
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Только вот толку от ListView без ViewHolder'a не больше чем от ScrollView.
Это да, но и преимущества у RecyclerView в этом отношении нет. По сути, используется та же стратегия, что и у ListView.
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Там есть декораторы можно ими сделать, можно в LayuotManager'e сделать, можно даже в адаптере сделать.
Это интересно, надо будет посмотреть.
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
25.02.2016, 22:48  [ТС]     Оптимизация списка новостей #14
теперь немного по полочкам: recycler view и list view - одного куста ягоды. Дальше, хоть один из них выгружает из памяти ушедшие за экран итемы? (по результатам теста оказалось что нет) У меня получился некий аналог листвью основанный на скролл вью. Единственный вопрос - как скрыть и выгрузить изображения которые уже не видно на экране?
теперь про weak/soft reference. К чему их следует применить , если изображение рисуется на канве, а битмапы убираются?

Добавлено через 3 часа 18 минут
CoolMind, Spelcrawler, Паблито, отвееетьте
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
26.02.2016, 01:01     Оптимизация списка новостей #15
Цитата Сообщение от danyasworld Посмотреть сообщение
скрыть вью, очистив память от картинок, но при этом не изменитьвысоту(чтоб скролл вью не прыгал) а потом если он вновь появится на экране - показать его
Цитата Сообщение от danyasworld Посмотреть сообщение
Единственный вопрос - как скрыть и выгрузить изображения которые уже не видно на экране?
Наверное, проще через Fresco или Glide либо какую-то другую библиотеку, хоть даже и самописную. На stackoverflow есть много предложений.
Цитата Сообщение от danyasworld Посмотреть сообщение
weak/soft reference. К чему их следует применить
Насколько помню, можно при загрузке изображений создавать их через soft reference. Затем можно попробовать вычислить ширину и высоту изображений и зафиксировать их. Когда удалите изображение из памяти, вместо него в list item'ах можете просто сделать пустую рамку фиксированных размеров.
В общем, я не знаю, просто предполагаю. Делал подобную задачу ранее, работала для списка из нескольких десятков новостей с картинками и текстом. Картинки были, по-моему, одного размера. На старых устройствах по переполнению памяти не вылетала.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
26.02.2016, 10:11     Оптимизация списка новостей #16
Цитата Сообщение от danyasworld Посмотреть сообщение
Дальше, хоть один из них выгружает из памяти ушедшие за экран итемы?
Там совсем другой механизм. Создается несколько вьюшек, так чтобы закрыть весь список и они просто перерисовываются при скролле.
Цитата Сообщение от danyasworld Посмотреть сообщение
теперь про weak/soft reference. К чему их следует применить , если изображение рисуется на канве, а битмапы убираются?
А нафига? Кладите картинки в ImageView с помощью Glide и все.
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
27.02.2016, 12:30  [ТС]     Оптимизация списка новостей #17
Spelcrawler, дело в том что я в своем проекте не использую ImageView. Я написал свой компонент, тк image view меня не устравает. В нем все битмапы после отрисовки вычищаются. Остается только канва.

Добавлено через 48 секунд
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Там совсем другой механизм. Создается несколько вьюшек, так чтобы закрыть весь список и они просто перерисовываются при скролле.
механизм примерно понять я успел, пока писал аналог
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2016, 01:28     Оптимизация списка новостей
Еще ссылки по теме:

Android Диплом: тема Андроид приложение, лента новостей
Android Хранение и кэширование новостей
Android Контейнер для новостей
Как реализовать дизайн ленты новостей? Android
Android Приложение для Android [Постер новостей]

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
03.03.2016, 01:28  [ТС]     Оптимизация списка новостей #18
Скажите, когда я рисую битмап на канве, канва начинает занимать столько же памяти сколько до этого канва? И как чистить канву?

Добавлено через 52 секунды
и можно ли натаскать на канву GC?
Yandex
Объявления
03.03.2016, 01:28     Оптимизация списка новостей
Ответ Создать тему
Опции темы

Текущее время: 10:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru