Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219

Работа с большими данными

31.08.2016, 12:47. Показов 1151. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Существуют ситуации, когда нужно подгрузить и распарсить что-то очень большое, ну, например, адреса Москвы. Если поставить парсить напрямую сразу всё, то, как правило, памяти телефона не хватит. Я делаю по частям в разных окнах, после окончания процесса перезапускаю окно, но бывают случаи, когда это слабо помогает, в процессе начинает глючить прогрессбар, затем гаснет экран и тп, вплоть до завершения приложения.
Интересует какие есть методики, хитрости и прочее для решения такого рода задач. Плюс ещё интересно, как выделяется память для приложения. Я брал для тестов телефон с 2гб оп чистый, а на приложение выделялось порядка 200мб при активном largeHeap.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2016, 12:47
Ответы с готовыми решениями:

Работа с большими изображениями
Изображение хранится в ресурсах приложения. Если оно больше размера экрана, то как его вписать при этом подстроится под размеры экрана? То...

Работа с большими объемами данных
С вебсервиса скачиваеться JSON с 16ю МБ данными. Далее ее в StringBuilder, но программа валиться с ошибкой OutOfMemory (Ну в принципе...

Работа с большими данными
Не знаю к какому разделу относится данный вопрос, решил написать сюда. Есть сайт, у него большая база данных. Из доступов только ftp и...

11
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
31.08.2016, 12:54
у этого чего-то очень большого наверное есть какой-то формат?

Добавлено через 52 секунды
если это xml то по идее XMLPullParser-у без разницы какой объем входящих данных
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
31.08.2016, 12:56  [ТС]
Ну обычно json. Загрузить его не проблема, а вот распарсить, чтобы хранить структурировано, проблематично.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
31.08.2016, 13:16
Цитата Сообщение от ExFau$t Посмотреть сообщение
Если поставить парсить напрямую сразу всё, то, как правило, памяти телефона не хватит.
1) Сложные/долгие обработки лучше запускать в сервисе и/или в отдельном потоке. Тогда это не будет завешивать активити и сможет работать даже в фоне.
2) Что парсим и чем? Если XML/JSON, то стандартными схемами (скорее всего) весь файл подгрузится в память, что для ОЧЕНЬ больших файлов не реально. В PHP были отдельные парсеры для гиганских XML файлов - может и в яве есть...
3) андроид МЕДЛЕННЫЙ! Может стоит распарсить "снаружи" (на сервере или на домашнем) и залить на телефон уже обработанное...
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
31.08.2016, 13:16
ExFau$t, добрый!
В своё время работал с файлами в несколько десятков мегабайт.
http://stackoverflow.com/quest... -json-file - здесь рекомендуют Gson с потоками (stream) и Jackson.
Парсинг большого объема JSON данных - здесь я колдовал с JsonReader и ручным разбором переменных.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
31.08.2016, 13:38  [ТС]
Цитата Сообщение от Tester64 Посмотреть сообщение
1) Сложные/долгие обработки лучше запускать в сервисе и/или в отдельном потоке. Тогда это не будет завешивать активити и сможет работать даже в фоне.
Ну разумеется.
Цитата Сообщение от Tester64 Посмотреть сообщение
3) андроид МЕДЛЕННЫЙ! Может стоит распарсить "снаружи" (на сервере или на домашнем) и залить на телефон уже обработанное...
К сожалению, такой вариант не всегда возможен.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
31.08.2016, 14:09
вообще, мне кажеттся, что любое нормальное api должно поддерживать постраничную выдачу результатов
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
31.08.2016, 16:31  [ТС]
CoolMind, спасибо, как вариант загрузка json во внутреннюю память, а потом чтение из него, меня устраивает. А вот JsonReader, наверное, не подойдёт, много исключений в ходе парсинга, какие-то поля есть, какие-то нет (например, корпус дома, строение и тп для адресов).

Добавлено через 2 часа 12 минут
А не может получиться так, что память забивается не при парсинге, а при записи полученных данных, например, в SharedPreferences?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
31.08.2016, 18:49
ExFau$t, легко. OOM - штука такая, ей много не надо. В той теме я писал, что уже при скачивании всё роняется, ещё до распознавания. Поэтому использовал буферизацию. Кроме того, можно подумать насчёт вложенности объектов в JSON. Если там 10 уровней вложенности, а движок распознавателя - неоптимизированный, то, наверное, весь блок прочитает и свалится (предположение).
SharedPreferences имеет, если верить SO, предел в 2 GiB, а во внутренней памяти, наверное, нет такого объёма. Ну метров 100 - и обломись.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
31.08.2016, 23:02  [ТС]
CoolMind, меня внутренняя память не очень беспокоит пока, а вот оп страдает...
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
01.09.2016, 00:36
ExFau$t, вам надо проследить, как растёт память. Естественно, с отладчиком поработать. Также посмотреть во время запуска график памяти (ну и в лог в нужных местах выводить всякие заметки). Может быть, где-то утечки есть.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
01.09.2016, 09:42  [ТС]
CoolMind, да кроме парсера нету больше ничего, да и потом это не си, чтобы память очищать. Происходит так, если закомментировать - порядок, если не парсить, а записать json.toString() - тоже норм, а вот начинаю брать конкретные поля разбирать и засовывать куда-нибудь в свои файлики, тут работает, потом виснет, потом вылет. Ничего лишнего в коне нету, получил getString - записал setString.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2016, 09:42
Помогаю со студенческими работами здесь

Работа с большими данными
Здравствуйте. Так получилось, что сейчас надо написать сайт с большим количеством контента (таблица с контентом > 1GB). И я хочу что-бы...

Класс для работы с большими данными
Задали задание, написать класс который позволит работать с большими массивами, т.е. конструктор класса должен позволять создавать массив...

Коллекции для работы с большими данными
Доброго времени суток! Столкнулся с такой проблемой: работаю с очень большим объемом данных, порядка в несколько миллионов элементов, дело...

Сводные с большими обьемами данными не обновляются через Workbook_Open()
Здравствуйте, У меня есть одна проблема с обновлением сводных таблиц. Через назначенные задания ставлю этот код на обновление файла: ...

Работа с большими числами
Подскажиье, пожалуйста, как работать с большими числами. Допустим у меня есть число...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru