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

Мини чат, тонкости разработки - Android

Восстановить пароль Регистрация
 
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,522
Записей в блоге: 2
05.04.2016, 16:33     Мини чат, тонкости разработки #1
Например приложение Viber и его аналоги..

Как в них реализован чат? А именно "ListView" с сообщениями.

Допустим БД SQLlite с сообщениями (текст, ссылки на картинки и звук и т.п.), звук и картинки как файл в SD

как там реализована загрузка сообщений в "ListView"? так чтобы не вылетал OutOfMemory и всякая такая бяка..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
05.04.2016, 17:21     Мини чат, тонкости разработки #2
ILNAR_93, а с чего должно быть OutOfMemory? Аватарки пользователей очень маленького размера, а сами фотки в чате, скорее всего, пережимаются в thumbnail, а по нажатию уже открывается оригинал
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
05.04.2016, 18:03     Мини чат, тонкости разработки #3
YuraAAA, видимо, имеются в виду JSON с диалогами, фотками, видео. Хотя да, они пережимаются в уменьшенные изображения.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
05.04.2016, 19:26     Мини чат, тонкости разработки #4
CoolMind, JSON...ну если только попытаться распарсить сразу десятки тысяч сообщений, то может быть OOM. Иначе, не вижу проблем)
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
05.04.2016, 20:15     Мини чат, тонкости разработки #5
YuraAAA, да, я это и имел в виду. Хотя сам Viber грузит частями, начиная с конца. Ну и, понятное дело, всё решают потоки (хоть для GSON, хоть для JsonReader).
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
05.04.2016, 20:46     Мини чат, тонкости разработки #6
CoolMind, конечно же limit + offset =)
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,522
Записей в блоге: 2
06.04.2016, 14:23  [ТС]     Мини чат, тонкости разработки #7
т.е.
1) сохраняем 2 изображения (1- оригинал, 2 уменьшенную копию) - в "ListView" загружаем уменьшенную копию изображения и по нажатию открываем оригинал?..
2) Adapter для "ListView" создается сразу со всеми сообщениями? или limit + offset?
3) с сервера получается тоже нужно сообщения получать limit + offset..!?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
06.04.2016, 15:20     Мини чат, тонкости разработки #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ILNAR_93,
Цитата Сообщение от ILNAR_93 Посмотреть сообщение
1) сохраняем 2 изображения (1- оригинал, 2 уменьшенную копию) - в "ListView" загружаем уменьшенную копию изображения и по нажатию открываем оригинал?..
На "крутых" серверах используются медиа транскодеры. Они пережимают оригинальное изображение.
Если нет такой возможности, то надо при загрузке ресайзить изображение до превью размера.

Цитата Сообщение от ILNAR_93 Посмотреть сообщение
2) Adapter для "ListView" создается сразу со всеми сообщениями? или limit + offset?
limit конечно
Цитата Сообщение от ILNAR_93 Посмотреть сообщение
3) с сервера получается тоже нужно сообщения получать limit + offset..!?
Ага. Т.е. загрузили сначала, например, 50 сообщений. Долистали до конца списка - попросили у сервера ещё 50, с оффсетом.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
06.04.2016, 15:55     Мини чат, тонкости разработки #9
Цитата Сообщение от YuraAAA Посмотреть сообщение
Долистали до конца списка - попросили у сервера ещё 50, с оффсетом.
А если долистали до первой записи, OOM не будет?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
06.04.2016, 19:54     Мини чат, тонкости разработки #10
CoolMind, нет, с чего. Listview/recyclerView не грузит же одновременно все записи
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
06.04.2016, 23:29     Мини чат, тонкости разработки #11
YuraAAA, ListView-то - да, но в адаптер можно по глупости засунуть весь массив
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,522
Записей в блоге: 2
07.04.2016, 08:12  [ТС]     Мини чат, тонкости разработки #12
Цитата Сообщение от CoolMind Посмотреть сообщение
А если долистали до первой записи, OOM не будет?
Наверное все загружаемые сообщения сохраняем в SQLlite и от туда уже загружаем limit + offset.

- Пока крутим вниз загружаем новые при этом удаляя старые (первые) записи.. И когда вверх листаем в обратном порядке.. - правильно понимаю?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.04.2016, 11:48     Мини чат, тонкости разработки #13
Цитата Сообщение от ILNAR_93 Посмотреть сообщение
- Пока крутим вниз загружаем новые при этом удаляя старые (первые) записи.. И когда вверх листаем в обратном порядке.. - правильно понимаю?
Зачем? ListView/RecyclerView сам этим занимается, кэшируя и отрисовывая только видимые элементы
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,522
Записей в блоге: 2
07.04.2016, 11:59  [ТС]     Мини чат, тонкости разработки #14
Цитата Сообщение от YuraAAA Посмотреть сообщение
ListView/RecyclerView сам этим занимается, кэшируя и отрисовывая только видимые элементы
Получается только добавляем по мере необходимости(когда листаем вниз - listview), а верхние сообщения из адаптера удалять не надо?


1) Если пока мы листаем вниз у нас в адаптер загрузится очень много сообщений, что будет?
2) В адаптер же сразу 500 и больше сообщений не засовываем?

Если есть время объясни по подробнее пжлста)

p.s. пока не понимаю
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.04.2016, 12:05     Мини чат, тонкости разработки #15
ILNAR_93, да засовывайте в адаптер, сколько хотите. Он же использует какую-то Вашу коллекцию, как источник данных. А отрисовывает на экране только те, что видны сейчас.
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,522
Записей в блоге: 2
07.04.2016, 12:16  [ТС]     Мини чат, тонкости разработки #16
Java
1
2
3
4
class product{
Bitmap  img;
String name;
}
если я создам вот такую "коллекцию"(много данных), ООМ не будет что-ли?
Я так понимаю что ООМ выходит не только когда в визуальной части много данных(например картинок), а когда в память загружено много.. В моем случае в коллекцию.. Или я чего-то не до понял и не знаю?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.04.2016, 13:26     Мини чат, тонкости разработки #17
ILNAR_93, будет. Надо хранить не bitmap, а String url. И подгружать изображения в лист асинхронно
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,522
Записей в блоге: 2
07.04.2016, 15:45  [ТС]     Мини чат, тонкости разработки #18
Цитата Сообщение от YuraAAA Посмотреть сообщение
Надо хранить не bitmap, а String url. И подгружать изображения в лист асинхронно
А как это происходит? Механизм какой? При прокрутке вниз подгружает по URI(или url)? Как? - может есть разжеванный пример?)
И получается все храниться как string (url), а только видимая часть загружена(картинки и т.п.)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2016, 13:43     Мини чат, тонкости разработки
Еще ссылки по теме:

Bluetooth-чат Android
Android Мини GoogleUser
Мини-пиложение для Android Android
Чат в приложении Android
Среда разработки на С++ Android

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

Или воспользуйтесь поиском по форуму:
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
08.04.2016, 13:43     Мини чат, тонкости разработки #19
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ILNAR_93, на SO есть множество примеров: http://stackoverflow.com/questions/5...es-in-listview. Советую следующие библиотеки: Fresco, Glide, Picasso.
Yandex
Объявления
08.04.2016, 13:43     Мини чат, тонкости разработки
Ответ Создать тему
Опции темы

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