Как стать автором
Обновить

Комментарии 13

Спасибо за вторую уже публикацию о разработке под Андроид :) очень интересно, надеюсь что вы будете продолжать дальше.
Почему вы не используете класс AsyncTask для разделения потоков?
использовать потоки напрямую — привычка из С++
А что произойдет если в момент загрузки пользователь повернет девайс, (сменит ориентацию экрана)?
в моем примере не произойдет ничего, т. к. ориентация задана постоянная — portrait.
для случая когда нужно что бы работал авто-поворот (sensor), добавляем кеширование изображений и используем изображения повторно, из памяти ;)
Спасибо. То, что доктор прописал.
Понижение приоритета потока интересная мысль, надо будет воспользоваться :)

Исходники скачать не получается, поэтому поинтересуюсь тут:
а при быстром скроллинге картинки в один View загружаться не будут?
скачал сорцы:
Вот в чем вопрос заключался:
при прокрутке метод getView у FetchImageAdapter будет вызывать некоторое количество раз.
При этом объект ViewHolder, передаваемый в качестве параметра, может быть одинаковым для разных элементов коллекции. тут все ок (для оптимизации).
И это означает, что в один и тот же объект с разной периодичностью, будет из отдельных потоков загружаться некоторое количество картинок, принадлежацих разным объектам. Последствия думаю очевидны.

зы. Поправьте меня, если где ошибся.
вы не ошибаетесь :)
смотрите ответ ниже
в данном примере будут, если список будет достаточно длинный. но этого можно избежать, созданием HashMap ключами которого будут ImageView а значениями, — URL. тогда, если пришел запрос на новое изображения для уже существующего в HashMap ImageView, обновляем значение, а изображение по пердыдущему URL не присваевать ImageView. Надеюсь понятно изложил.
Опять-таки, советую создать кеш скаченных изображений, что бы не скачивать их снова. Но это уже тема для другого поста ;)
Идея более-менее понятна, хотя на мой вкус проще поток обрывать.
Иначе при прокрутке память потоками быстро засрется.

Кеширование картинок в памяти тоже легко может упереться на OutOfMemory

зы. отталкиваюсь от опыта своего приложения, где средняя длина списка около 200, а размер картинки около 150х150
1) кешируйте и складывайте картинки на диск, и делайте recycle() ненужным, тогда OutOfMemory не будет. а если в кеше нет изображения, востанавливаем его с диска.
2) обрывать поток означает то, что нужно будет создавать его опять, если пользователь будет скролить список вверх (назад), что не есть хорошо, ИМХО.
Спасибо, пробовал до этого сделать как в статье Tom van Zummeren'а
blog.jteam.nl/2009/09/17/exploring-the-world-of-android-part-2/

но что-то у меня с руками и потоками и не сложилось, хотя он и делал кеширование. Самое главное что шаблон отрисовывается а картинки потом подгружаются
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории