Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
#1

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

24.02.2016, 20:26. Просмотров 473. Ответов 17
Метки нет (Все метки)

Написал я небольшое приложение которое выводит новости с одного сайта. Все бы ничего, но получилось много катртинок. Очень много. Примерно к 10 новости все начинает тормозить, дальше вылетает с out of memory. Есть ли возможность взять и скрыть вью, очистив память от картинок, но при этом не изменитьвысоту(чтоб скролл вью не прыгал) а потом если он вновь появится на экране - показать его?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2016, 20:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Оптимизация списка новостей (Программирование Android):

Парсинг сайта новостей
Здравствуйте, уважаемые! В приложении Android пытаюсь вывести новости с...

Контейнер для новостей
Новости подгружаются с помощью http с сервера, в какие контейнеры их стоит...

Хранение и кэширование новостей
Доброе утро, сабж: В какой контейнер следует подгружать новости ( обычного...

Приложение для Android [Постер новостей]
Ребят, если есть возможность помочь с приложением(Минимальная социальная сеть...

Как реализовать дизайн ленты новостей?
У меня есть вот такое вот активити ...

Приложение - парсер новостей с вконтакта ,быстрое создание
Здравствуйте!Нужно в предельно короткие сроки заделать приложение-парсер...

17
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
24.02.2016, 20:39 #2
какой вопрос - такой ответ
надо использовать не ScrollView, а RecyclerView (примеров вагон и в инете и на форуме)
- заводим класс-модель для новостей с полями типа title, image_url, data и так далее
- в отдельном потоке парсится сайт и все складывается в ArrayList
- создаем адаптер и передаем его в RecyclerView
- в ViewHolder-е внутри recyclerview заполняем поля в View, которое будет показывать новость
- картинки грузим библиотекой Glide
все
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
25.02.2016, 10:11 #3
danyasworld, если вкратце, то можете использовать любой компонент, хоть ListView, хоть RecyclerView, хоть ScrollView. Если будете работать с картинками, надо почитать про weak reference или сразу использовать Fresco или Glide. Первый, вроде как, по некоторым параметрам получше будет.
0
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
25.02.2016, 10:15  [ТС] #4
Паблито, RecyclerView, к сожалению, был добавлен в более поздних версиях андроида, чем те минимальные которые у меня установлены. С остальным у меня и так порядок, все парсится подгружается и выводится. Единственная проблема в изображениях. Они скоро начинают занимать слишком много памяти
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
25.02.2016, 10:34 #5
Цитата Сообщение от danyasworld Посмотреть сообщение
RecyclerView, к сожалению, был добавлен в более поздних версиях андроида
Библиотеки поддержки же есть.
Цитата Сообщение от danyasworld Посмотреть сообщение
Единственная проблема в изображениях.
Используйте библиотеки, выше сказали какие.
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
25.02.2016, 10:55 #6
Spelcrawler, честно говоря, не понял, зачем здесь RecyclerView? Чисто для красоты? Всё решается и стандартным ListView.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
25.02.2016, 10:57 #7
Цитата Сообщение от CoolMind Посмотреть сообщение
честно говоря, не понял, зачем здесь RecyclerView?
Ну он удобнее намного, возможностей больше, базовые вещи проще чем в ListView. Ну и ТС вероятно, только учится использовать что-то подобное. Дак зачем ему изучать устаревший элемент, когда есть хороший новый?
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
25.02.2016, 10:59 #8
Spelcrawler, здесь я согласен. Особенно он в пору, если использовать Material Design с его CardView.
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 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"
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
25.02.2016, 12:38 #10
Да, первый пункт невероятен
Одно и то же, но у ListView сохраняется возможность работы и без ViewHolder. Так что преимуществ по первому пункту никаких.

Добавлено через 52 секунды
А если вспомнить про минусы RecyclerView, а также отсутствие Header, Footer, то и вовсе иногда лучше молчать, чем говорить.
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
25.02.2016, 12:46 #11
ты просто еще не понимаешь в чем их разница и в чем профит ресайклера, поэтому и бесишься
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 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 минут.
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
25.02.2016, 13:33 #13
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Только вот толку от ListView без ViewHolder'a не больше чем от ScrollView.
Это да, но и преимущества у RecyclerView в этом отношении нет. По сути, используется та же стратегия, что и у ListView.
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Там есть декораторы можно ими сделать, можно в LayuotManager'e сделать, можно даже в адаптере сделать.
Это интересно, надо будет посмотреть.
0
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, Паблито, отвееетьте
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
26.02.2016, 01:01 #15
Цитата Сообщение от danyasworld Посмотреть сообщение
скрыть вью, очистив память от картинок, но при этом не изменитьвысоту(чтоб скролл вью не прыгал) а потом если он вновь появится на экране - показать его
Цитата Сообщение от danyasworld Посмотреть сообщение
Единственный вопрос - как скрыть и выгрузить изображения которые уже не видно на экране?
Наверное, проще через Fresco или Glide либо какую-то другую библиотеку, хоть даже и самописную. На stackoverflow есть много предложений.
Цитата Сообщение от danyasworld Посмотреть сообщение
weak/soft reference. К чему их следует применить
Насколько помню, можно при загрузке изображений создавать их через soft reference. Затем можно попробовать вычислить ширину и высоту изображений и зафиксировать их. Когда удалите изображение из памяти, вместо него в list item'ах можете просто сделать пустую рамку фиксированных размеров.
В общем, я не знаю, просто предполагаю. Делал подобную задачу ранее, работала для списка из нескольких десятков новостей с картинками и текстом. Картинки были, по-моему, одного размера. На старых устройствах по переполнению памяти не вылетала.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
26.02.2016, 10:11 #16
Цитата Сообщение от danyasworld Посмотреть сообщение
Дальше, хоть один из них выгружает из памяти ушедшие за экран итемы?
Там совсем другой механизм. Создается несколько вьюшек, так чтобы закрыть весь список и они просто перерисовываются при скролле.
Цитата Сообщение от danyasworld Посмотреть сообщение
теперь про weak/soft reference. К чему их следует применить , если изображение рисуется на канве, а битмапы убираются?
А нафига? Кладите картинки в ImageView с помощью Glide и все.
0
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
27.02.2016, 12:30  [ТС] #17
Spelcrawler, дело в том что я в своем проекте не использую ImageView. Я написал свой компонент, тк image view меня не устравает. В нем все битмапы после отрисовки вычищаются. Остается только канва.

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

Добавлено через 52 секунды
и можно ли натаскать на канву GC?
0
03.03.2016, 01:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2016, 01:28
Привет! Вот еще темы с решениями:

Диплом: тема Андроид приложение, лента новостей
Тема создать приложения Лента новостей, вот хотелось бы узнать, как вы бы...

Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей
Задача в том, чтобы установить соединение с веб-сервером rbc.ru и вычитывать с...

Оптимизация парсера новостей с rusnovosti
Здрасти пытливые умы и гуру своего дела :) Вот мой код: <?php ...

Оптимизация вида новостей в меню-аккордеон
Захотелось сделать иерархию для страницы новостей. Нашелся подходящий...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru