Рекомендации по сохранению данных на Android? - PullRequest
8 голосов
/ 08 января 2010

Существует веб-сервис, который предоставляет некоторые данные, которые использует мое приложение.Эти данные довольно большие и меняются ОЧЕНЬ редко, поэтому я подумал, что было бы неплохо, если бы приложение могло кэшировать их на SD-карте и обновлять только по мере необходимости.файл) и разбора его в дерево объектов с помощью SAX.Этот процесс занимает (максимум) 2-3 секунды по моему Wi-Fi.Однако сериализация полученных объектов на SDCard занимает значительно больше времени (минута или более), а десериализация все же занимает больше времени, чем просто загрузка / анализ.

Есть ли у кого-нибудь какие-либо рекомендации по улучшению этого или альтернативногоидеи для сохранения этих данных (кроме простого сохранения файла XML и повторного анализа каждый раз)?

ОБНОВЛЕНИЕ: Это больше, чем тривиальная коллекция записей.Граф-объект на самом деле очень сложен, и сохранение его в базе данных может привести к созданию десятков таблиц, содержащих только одну запись в каждой.

Ответы [ 5 ]

10 голосов
/ 08 января 2010

Сериализация Android печально известна медленный. Я настоятельно рекомендую перейти на использование XML или JSON (или чего-либо другого) и записать файл таким образом. Поскольку у вас уже есть синтаксический анализатор XML, может оказаться наиболее целесообразным просто кэшировать исходный загруженный вами XML-файл и при необходимости выполнить его повторную обработку.

Я перешел с Serializable на хранилище файлов JSON в приложении раньше, и увеличение скорости было невероятным, по крайней мере, на один порядок.

(Возможно, я неправильно понимаю ваш вопрос - я предполагаю, что вы используете Serializable для записи на диск. Если вы воспроизводите XML, то я не уверен, почему он намного медленнее на SD-карте. согласитесь, что база данных SQLite, как правило, наиболее целесообразна, но, как вы уже заявили, она не соответствует потребностям вашего приложения.)

3 голосов
/ 08 января 2010

Кроме того, если ваши данные не меньше ста килобайт, я бы посоветовал просто хранить их в вашем личном хранилище данных, а не на SD-карте. Имейте в виду, что нельзя полагаться на доступность SD-карты.

0 голосов
/ 08 января 2010

Если веб-служба может дать вам только определенное количество результатов (что-то вроде: requestData между индексами 1 и 10 или дать мне первые 25 результатов), попробуйте использовать это (поместите простую кнопку «Загрузить больше результатов» или реализуйте механизм автозагрузки). Если веб-служба не предоставляет эту функцию, попробуйте сохранить ваш XML на SD-карте, а когда вам нужны данные, попробуйте проанализировать только указанное количество результатов. Надеюсь, что это поможет!

0 голосов
/ 08 января 2010

Я только что писал приложение для Android на прошлой неделе, которое в основном делает это. Он извлекает некоторые (большие) XML-файлы онлайн, а затем отображает часть данных в различных представлениях.

Мы делаем это путем извлечения и анализа XML с использованием SAX и (во время анализа) записи всего этого в базу данных SQLite. И тогда мы просто запрашиваем базу данных каждый раз, когда нам нужно отобразить некоторое представление набора данных.

Работает как шарм и достаточно быстр для отображения большого количества данных на оверлее карты Google, где мы запрашиваем базу данных при каждом вызове метода draw нашего оверлея карты.

Так что я бы определенно предложил пойти на базу данных SQLite , если данные в документе XML легко представлены в базе данных.

0 голосов
/ 08 января 2010

Почему вы не используете базу данных? См. Руководство по хранению данных Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...