Ссылка в магазине.
Разработкой я занимался почти весь последний год в свободное время и считаю результат неплохим, учитывая мои никакие знания на начальном этапе.
Уже сейчас приложение может многое, чего ожидаешь от клиента социальной сети, по крайней мере той части, которой я пользовался. В этом плане сильно не хватает обратной связи от пользователей.
Этот пост я создавал прежде всего с целью получить отзывы программистов, что сделано неправильно и как делать правильно, ведь книги только молчаливые советники, но никоим образом не критики 🙂
Как итог всей этой работы я планирую залить весь код в открытый доступ, вдруг кому-либо будут полезны мои наработки.
За это время набилось много шишек, от которых хотелось бы уберечь других начинающих разработчиков.
ISupportIncrementalLoading
Практически все приложения так или иначе показывают перечень элементов пользователю. Изначально у меня был собственный велосипед, который был реализован через кнопочки вперед-назад и фиксированное количество элементов для загрузки. На самом деле проще и быстрее реализовать интерфейс ISupportIncrementalLoading и привязать его к GridView. Когда пользователь прокручивает список до определенной точки происходит проверка свойства bool HasMoreItems и при его истинности вызов метода LoadMoreItemsAsync. От программиста требуется только правильно реализовать эти две сущности.
К сожалению тут есть свои подводные камни
- Не все контейнеры поддерживают этот интерфейс, например VariablesizedWrapGrid
- Потребление оперативной памяти постепенно растет, например при попытке показать около несколько сотен картинок полного размера приводит к краху приложения. Выход — показывать превьюшки, а полноразмерные картинки показывать только по клику пользователя.
Группировка запросов к вконтакте
У вконтакте есть ограничение на количество запросов в секунду, но при этом не все методы возвращают достаточное количество дополнительной инофрмации.
Например лента новостей выдает только ID пользователей, добавивших новости. Загружаем 20 новостей, нужно выполнить 20 запросов на получение имени и фотографии. Несложная арифметика показывает, что для этого нам прийдется подождать больше 5 секунд.
Я решил использовать хранилище объектов, которое выдает объект моментально по его ID, при этом объекты которые не заполнены информацией добавляются в очередь загрузки. Раз в пол секунды срабатывает таймер и загружает информацию для всех незаполненных объектов одним запросом.
Минус этого подхода в том, что пользователь около полусекунды видит на месте фотографии и имени товарища серый квадрат.
Ну и в конце пара ссылок на мой блог, чтобы не переписывать по новой:
ссылка на оригинал статьи http://habrahabr.ru/post/188680/
Добавить комментарий