Android OutOfMemoryError с XML - PullRequest
       17

Android OutOfMemoryError с XML

1 голос
/ 28 февраля 2011

Я создаю приложение, которое извлекает XML с сервера, а затем анализирует его (DIDL отформатирован местами). Цель состоит в том, чтобы загрузить как можно больше памяти, чтобы пользователям было легче просматривать (чтобы обеспечить быструю прокрутку результатов), но я продолжаю получать OutOfMemoryError с. Я немного новичок в Android, и кажется, что виртуальные машины действительно привередливы в вещах. Я загружаю не более одного мегабайта XML, и почти сразу же отбрасываю его. Что я должен сделать, чтобы эти ошибки не возникали?

Должен ли я загружать порцию за порцией файла по сети, записывать его на диск, затем загружать порцию за порцией обратно в память и из нее, анализируя все в POJO? Если этого можно избежать, я бы не хотел реализовывать какую-либо форму разбиения на страницы, как в приложении Twitter (оно использовалось для загрузки большего количества записей, когда вы достигали дна, теперь оно загружается много раз за разом, а также аварийно завершает работу с ошибка OOM.) Я использую Nexus One, если это поможет, CM7 / Android 2.3.3.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Вы можете прочитать эту замечательную статью о разборе XML на Android.Использование pull parser было бы хорошим выбором для вас, так как не нужно считывать полный документ в память, что является проблемой в вашем случае.Я бы посоветовал вам сохранить проанализированные результаты в базе данных, поскольку, как только они появятся, вы сможете быстро составить их список и разместить их по своему усмотрению, и производительность БД будет отличной.Таким образом, вам необходимо выполнить загрузку полных данных с сервера в БД только один раз (если данные не изменяются на сервере) или загрузить их один раз, а затем периодически получать обновления, если они меняются (как в случаетвиттер).

1 голос
/ 28 февраля 2011

Переместите все ваши объявления объектов из циклов и обнулите их после использования. И используйте System.gc () часто (поверьте мне, это работает). Используйте объекты уровня класса как можно меньше. Запустите ваше приложение и следите за журналами Logcat.

...