Хорошие рекомендации по разработке приложения для электронной торговли

Я делаю приложение для электронной коммерции на Android, и, поскольку это мой первый серьезный проект, я пытаюсь заранее найти лучший способ сделать это.

Приложение обращается к веб-службе (magento api, что означает мыло или xml rpc, к сожалению) и получает весь контент на телефоне (категории продуктов, сведения о продукте, учетные данные пользователя и т.д.). Я думаю, что он должен делать ленивую загрузку или что-то в этом роде.

Итак, я думал сохранить учетные данные пользователя в пользовательском объекте, который будет храниться в SharedPreferences, чтобы каждый отчет активности легко мог получить к нему доступ. Я буду использовать пару ListView для отображения содержимого и AsyncTask для получения необходимых данных. Должен ли я хранить все данные в памяти в объектах или использовать какой-то кеш или локальную базу данных? Кроме того, я планирую использовать HashMap с SoftReferences для хранения растровых изображений, которые я загружаю. Но не будет ли это много памяти?

Как все действия имеют доступ ко всем этим объектам (корзина для электронной торговли и т.д.)? Я подумываю передать их с помощью намерений, но это не кажется мне правильным. Может ли SharedPreferences использоваться для большого количества объектов и есть ли какие-либо проблемы concurrency?

Любые указатели будут действительно оценены. Какие хорошие рекомендации? На каких занятиях я должен смотреть? Знаете ли вы какие-либо ресурсы в Интернете, чтобы я мог проверить?

Ответы

Ответ 1

Очень подробный вопрос, я сделаю все возможное, чтобы ответить на него. В моем приложении я использовал следующий подход:

  • Я сохраняю учетные данные пользователя в общих настройках. Предпочтения могут содержать только пользовательские объекты, если они сериализуемы, а запись и чтение из флэш-памяти занимает много времени. Поэтому я загружаю настройки при запуске и сохраняю их в памяти.

  • Я стараюсь хранить все данные в памяти, которые необходимы во многих местах и ​​в согласованном состоянии, вся другая память передается через сериализацию в json и проходит через намерение, или я пропускаю только идентификаторы, и я повторно вытащите его из сети. (В настоящее время существует определенная возможность для обналичивания в локальной базе данных, но усилия по ее обновлению - это большая работа на данный момент.) Чтобы хранить объекты, которые требуют много времени для перезагрузки из внутренней памяти или сети и повторного использования, я использую пользовательский application, который содержит ссылку на некоторые объекты контроллера, которые управляют кэшированием. Приложение останется в памяти, пока ваше приложение не будет закрыто. Это удобно, но может привести к необходимости использовать много памяти, если вы не будете осторожны.

  • Растровые изображения, загружаемые моей программой, кэшируются на двух уровнях. В первый раз, когда я хочу получить доступ к образу, я создаю объект диспетчера изображений внутри области действия. Этот объект попытается найти растровое изображение во внутренней карте. Если его нет, он попытается загрузить его из памяти телефона, если его нет в памяти телефона, он будет загружать его из сети, хранить его в папке кеша моего приложения и помещать на карту. Таким образом, растровое изображение доступно до тех пор, пока действие выполняется и очищается в тот момент, когда пользователь переходит на другой экран. До сих пор этого достаточно для меня.

В конце просто начните программирование и вернитесь, если вы столкнетесь с другими вопросами или ошибками и зададите еще несколько конкретных вопросов.

Ответ 2

Многие полезные методы, которые вам понадобятся использовать: ContentProviders, AsyncTasks, Bitmap Caching,... используются в "Шелвах" Роменских парней (http://www.curious-creature.org/2009/01/19/shelves-an-open-source-android-application/). Это отличный отправной пункт, чтобы получить рекомендуемый поток Android.